Estou em um projeto, que travei no ponto de retornar um lista usando a FK do relacionamento.
tenho os seguintes relacionamentos, como ficaria a JPQL para usar na query?
package br.com.grupoinvestiga.model;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Atividades {
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private long id;
private String categoria;
@Temporal(TemporalType.TIMESTAMP)
private Calendar data = Calendar.getInstance();
private String titulo;
@OneToMany(mappedBy = "atividades", targetEntity = Perguntas.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Perguntas> perguntas;
public Calendar getData() {
return data;
}
public Collection<Perguntas> getPerguntas() {
return perguntas;
}
public void setPerguntas(List<Perguntas> perguntas) {
this.perguntas = perguntas;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCategoria() {
return categoria;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
package br.com.grupoinvestiga.model;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Perguntas {
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private long id;
@ManyToOne
@JoinColumn(name="atividadesId")
private Atividades atividades;
private String pergunta;
@OneToMany(mappedBy = "perguntas", targetEntity = Alternativas.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Alternativas> alternativas;
public long getId() {
return id;
}
public List<Alternativas> getAlternativas() {
return alternativas;
}
public void setAlternativas(List<Alternativas> alternativas) {
this.alternativas = alternativas;
}
public void setId(long id) {
this.id = id;
}
public String getPergunta() {
return pergunta;
}
public void setPergunta(String pergunta) {
this.pergunta = pergunta;
}
public Atividades getAtividades() {
return atividades;
}
public void setAtividades(Atividades atividades) {
this.atividades = atividades;
}
}
procurei exemplos na internet, pois quero retorna todas as perguntas que tiver o ID de atividades mais não consegui entender, tentei essa query mais sem sucesso:
public List<Perguntas> perguntas(long id) {
String jpql = "SELECT atividades FROM Atividades atividades JOIN FETCH perguntas JOIN perguntas pergunta WHERE pergunta.atividades.id = :id";
Query query = conexao.createQuery(jpql, Perguntas.class).setParameter("id", id);
List<Perguntas> perguntas = query.getResultList();
return perguntas;
}