2
respostas

Mapeamento em JPA mappedBy

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.

2 respostas

Bom dia Clinton, não verdade não precisaria de query. Pois sua classe Livro tem uma lista de comentarios certo? Então se você der um find e buscar um livro, por fazer um getComentarios() em cima desse livro e ele te trás a lista

Olá Guilherme na verdade não entendeu muito bem o que eu quis dizer, eu já tinha feito da forma que informou acima, desta forma a lista vem toda em uma linha, eu quero que a lista venha separada por id linha a linha pois vou usar está lista em uma pagina xhtml, eu preciso mesmo trazer ela atraves da tabela Comentario do mesmo jeito abaixo:

select mensage, livro.titulo from comentario join livro where livro.id =1;
 mensagem                                             | titulo       |
+------------------------------------------------------+--------------+
| DOM CASMURRO - o melhor livro do ano                 | Dom Casmurro |
| BRIDA - um livro com fortes emoções                  | Dom Casmurro |
| O ALQUIMISTA - que livro mais magico                 | Dom Casmurro |
| Dom Casmurro - O que dizer deste verso lindo de amor | Dom Casmurro |
| O ALQUIMISTA - Existe livro melhor ?                 | Dom Casmurro |
| DOM CASMURRO - li e recomendo                        | Dom Casmurro |
| Vai sempre continuar sendo o melhor livro.           | Dom Casmurro |
| Teste                                                | Dom Casmurro |
| Outro                                                | Dom Casmurro |
| Um dois tres som kkk melhor parte                    | Dom Casmurro |
| Ah vá                                                | Dom Casmurro |
+------------------------------------------------------+--------------+

Compreende agora ? eu li em alguns posts que eu preciso apresentar a classe comentario a classe livro, fazer um bidirecinamento de classes, mas não consegui.