Boa noite,
Surgiu uma duvida que nunca vi em um livro de JPA, tenho duas classes uma de Livros e outra de Comentarios, estou fazendo uma consulta no banco que me traga os comentarios relacionados aquela id do livro como o exemplo abaixo:
select mensage, livro.titulo from comentario join livro where livro.id =1;
No meu banco funciona normalmente mas no JPQL não funciona
TypedQuery<Comentario> query = em.createQuery(
"Select u FROM Comentario u join u.livro c WHERE c.id = :pId", Comentario.class);
query.setParameter("pId", livro.getId());
List<Comentario> comentario = query.getResultList();
Está é minha classe do livro ela é 1 ... * OneToMany
package br.com.caelum.livraria.modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
public class Livro implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
private String titulo;
private String isbn;
private double preco;
@Temporal(TemporalType.DATE)
private Calendar dataLancamento = Calendar.getInstance();
private Integer avaliacao;
public Integer getAvaliacao() {
return avaliacao;
}
public void setAvaliacao(Integer avaliacao) {
this.avaliacao = avaliacao;
}
@ManyToMany(fetch = FetchType.EAGER)
private List<Autor> autores = new ArrayList<Autor>();
@OneToMany(fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
private List<Comentario> comentarios = new ArrayList<Comentario>();
E a classe comentario eu usei um JoinColumn com a chave estrangeira da outra classe mas mesmo assim minha consulta não retorna nenhum dado no jpql
@Entity
public class Comentario {
@Id
@GeneratedValue
private Integer id;
private String mensagem;
private String autorDoComentario;
@Temporal(TemporalType.DATE)
private Calendar dataLancamento = Calendar.getInstance();
@ManyToOne
@JoinColumn(name = "comentarios_id")
private Livro livro;
Desde já obrigado pela ajuda de todos.