Na minha aplicação não vou criar uma classe para a tabela VendaProduto e sim uma anotação:
@EntitypublicclassVendaimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongcodigo;@ManyToMany@JoinTable(name="VENDA_HAS_PRODUTO",joinColumns=@JoinColumn(name="VENDA_CODIGO"),inverseJoinColumns=@JoinColumn(name="PRODUTO_CODIGO"))privateList<Produto>produtos;// gerar os getters e setters}
@EntitypublicclassProdutoimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongcodigo;@ManyToMany(mappedBy="produtos")privateList<Venda>vendas;// gerar os getters e setters}
Como faço um método para listar as vendas de um determinado produto no meu GerenciadorVendasBeans ?
Já fiz, antes disso, tenho que fazer um método para listar as vendas de um produto X .
publicList<Venda>listarVendas(){
Queryquery=em.createQuery("SELECT ven FROM Venda ven WHERE ................????????? ");returnquery.getResultList();
}
Consegui listar todas as vendas com:
Query query = em.createQuery("SELECT ven FROM Venda ven");
Como eu faço esse método ?
Tem outra forma ?
D
d34d_d3v1l
cara, vc ta com duvida em como fazer a query ? ou como mostra a lista na visualização ?
nao to te entendendo
M
Mathiasr
d34d_d3v1l:
cara, vc ta com duvida em como fazer a query ? ou como mostra a lista na visualização ?
nao to te entendendo
Estava com dúvida em fazer o método para mostrar a lista, com a query ou não.
Fiz o seguinte:
publicList<Venda>listarVendas(Produtoproduto){Queryquery=em.createQuery("SELECT v.produtos FROM Venda v WHERE v.codigo = "+produto.getId()); returnquery.getResultList();
}
Para quem vai fazer algo parecido com esse código acima, cuidado com a anotação na propriedade.
(fetch = FetchType.LAZY ou FetchType.EAGER)
D
d34d_d3v1l
Então está solucionado ?
coloque [resolvido] no titulo do tópico…
Não entendi mto cara… mas só me diga uma coisa… ONDE coloquei esse método? em qual classe?
M
Mathiasr
d34d_d3v1l:
Então está solucionado ?
coloque [resolvido] no titulo do tópico...
Não entendi mto cara... mas só me diga uma coisa... ONDE coloquei esse método? em qual classe?
Em uma classe Controller usando o modelo MVC, onde existe o EntityManager gerenciado pelo container.
@Stateless@Local(GerenciadorDeVendas.class)publicclassGerenciadorDeVendasBeansimplementsGerenciadorDeVendas{@PersistenceContextprivateEntityManagerem;publicList<Venda>listarVendas(Produtoproduto){Queryquery=em.createQuery("SELECT v.produtos FROM Venda v WHERE v.codigo = "+produto.getId());returnquery.getResultList();}// métodos para incluir, alterar...
D
d34d_d3v1l
Mathiasr:
d34d_d3v1l:
Então está solucionado ?
coloque [resolvido] no titulo do tópico...
Não entendi mto cara... mas só me diga uma coisa... ONDE coloquei esse método? em qual classe?
Em uma classe Controller usando o modelo MVC, onde existe o EntityManager gerenciado pelo container.
@Stateless@Local(GerenciadorDeVendas.class)publicclassGerenciadorDeVendasBeansimplementsGerenciadorDeVendas{@PersistenceContextprivateEntityManagerem;publicList<Venda>listarVendas(Produtoproduto){Queryquery=em.createQuery("SELECT v.produtos FROM Venda v WHERE v.codigo = "+produto.getId());returnquery.getResultList();}// métodos para incluir, alterar...
Sim, colocando isso no Controller, vc quebra o MVC.
Pq a ideia do MVC é vc conseguir substituir qqer camada sem afetar a outra.
Uma dica... coloca QUERIES em outra camada (DAO, Repository) para trabalhar apenas com as bases!
Nada de misturar responsabilidades ;)
mas, siga se vc quiser... n tem nada a ver com o tópico