Consulta relacionamento manytomany hibernate

6 respostas
A

Ola pessoal,

estou quebrando a cabeça para fazer uma consulta com relacionamento n x n com hibernate.

tenho 2 tabela, uma produto e outra refeicaDia…

@Entity
@Table(name="refeicaoDia")
public class RefeicaoDia
        implements Serializable, Persistent {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    private String graduacao;

    @ManyToOne(optional=false)
    private TipoRefeicao tipoRefeicao;
    @Enumerated(EnumType.STRING)
    private DiaDaSemana diaSemana;

    @ManyToMany(cascade=CascadeType.PERSIST)
    private List<Produto> produto = new ArrayList<Produto>();

//getts setts

e produto

@Entity
@Table(name="produto")
public class Produto
        implements Serializable, Persistent {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private Double qtadeTabelar;
    private String medida;

    
    public Produto() {}

//getts setts

No banco ele cria a tabela refeicaoDia_produto de relacionamento entre as duas entidades normalmente…
fiz uns teste ele estava salvando perfeitamente…

mas nao estou conseguindo fazer uma pesquisa, segue o que estou querendo fazer:

gostaria que ele trouxesse todos os produtos q tenham relacionamento com a tabela refeicaoDia que contenham como exemplo…dia da semana sgunda…tipoRefeicao café e graducao oficiais

Tenso isso hein … pelo menos pra mim haha

Toda ajuda é bem vinda rsrs…Agradeço a todos =D

6 Respostas

dev.rafael
select rd.produto from RefeicaoDia rd where dia = pacota.DiaDaSemana.SEGUNDA and tipoRefeicao = 'cafe' and graduacao = 'oficiais'
A

Obrigado pela resposta dev.rafael, vou testar!

dev.rafael

Vc ñ se expressou mal e essa query ñ retorna apenas os nomes dos produtos mas sim a lista de produtos do RefeicaoDia q atende as condições q vc específicou. Se ela estiver retornando apenas os nomes então o erro estará em outro ponto do código ñ na query.

A

Funcionou!

vou deixar meu método postado!

public List<Produto> procurarPorRefeicaoDia(String diaDaSemana,
                                              String graducao,
                                              TipoRefeicao tipoRefeicao)
                                              throws NadaFoiEncontrado {
       List<Produto> resultado;
        
        Session session = HibernateUtil.getSession();
        Query q = session.createQuery("select rd.produto from RefeicaoDia as rd where rd.diaSemana = :diaDaSemana "
                                                                  + "and rd.tipoRefeicao = :tipoRefeicao and rd.graduacao = :graduacao");
        q.setString("diaDaSemana", diaDaSemana.toUpperCase());
        q.setEntity("tipoRefeicao", tipoRefeicao);
        q.setString("graduacao", graducao);

        return resultado = q.list();
    }

Obrigado rafael pela ajuda!

A

hehe sim vdd, depois que eu respondi que eu parei e pensei, nao mas funcionou legal como havia me informado

Obrigado

dev.rafael

Agora q eu notei, vc está usando o Hibernate e as queries q eu te passei são so JPA. É interessante saber q elas funcionaram, provavelmente pq o hibernate implementa a espec do JPA e deve prover essa integração. Mas agora eu ñ posso garantir q queries do JPA sempre vão funcionar do Hibernate. Acho melhor vc dar uma procurada por HQL q é a linguagem de queries do Hibernate ou migrar p/ o JPA de vez. Usar Hibernate com queries do JPA pode ter um impácto negativo na mantenibilidade do seu código, isso pode deixa-lo confuso, menos legível.

Criado 18 de outubro de 2010
Ultima resposta 19 de out. de 2010
Respostas 6
Participantes 2