[RESOLVIDO] Relacionamento @ManyToMany com JSF + JPA

7 respostas
M

[img][/img][img][/img]Pessoal, já pesquisei e não encontrei minha dúvida!

Tenho um relacionamento no meu modelo de banco existente (N,M)

Venda -|-|---------<=--VendaProduto--=>------------|-|-Produto

Na minha aplicação não vou criar uma classe para a tabela VendaProduto e sim uma anotação:

@Entity
public class Venda implements Serializable {
 
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigo;
 
    @ManyToMany
    @JoinTable(name="VENDA_HAS_PRODUTO",
        joinColumns=@JoinColumn(name="VENDA_CODIGO"),
        inverseJoinColumns=@JoinColumn(name="PRODUTO_CODIGO"))
    private List<Produto> produtos;
 
    // gerar os getters e setters
}
@Entity
public class Produto implements Serializable {
 
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigo;
 
    @ManyToMany(mappedBy="produtos")
    private List<Venda> vendas;
 
    // gerar os getters e setters
}

Como faço um método para listar as vendas de um determinado produto no meu GerenciadorVendasBeans ?

7 Respostas

D

Uai…
qual o problema cara?

tentou fazer o xhtml já ?

M
d34d_d3v1l:
Uai... qual o problema cara?

tentou fazer o xhtml já ?

Já fiz, antes disso, tenho que fazer um método para listar as vendas de um produto X .

public List<Venda> listarVendas() {
		
		Query query = em.createQuery("SELECT ven FROM Venda ven WHERE ................????????? ");
		
		return query.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

cara, vc ta com duvida em como fazer a query ? ou como mostra a lista na visualização ?
nao to te entendendo

M
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:

public List<Venda> listarVendas( Produto produto) {  
          
        Query query = em.createQuery("SELECT v.produtos FROM Venda v WHERE v.codigo = " + produto.getId());  
          
        return query.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

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
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)
public class GerenciadorDeVendasBeans implements GerenciadorDeVendas{


@PersistenceContext
private EntityManager em;

public List<Venda> listarVendas( Produto produto) {    
            
        Query query = em.createQuery("SELECT v.produtos FROM Venda v WHERE v.codigo = " + produto.getId());    
            
        return query.getResultList();    
}

// métodos para incluir, alterar...
D
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)
public class GerenciadorDeVendasBeans implements GerenciadorDeVendas{


@PersistenceContext
private EntityManager em;

public List<Venda> listarVendas( Produto produto) {    
            
        Query query = em.createQuery("SELECT v.produtos FROM Venda v WHERE v.codigo = " + produto.getId());    
            
        return query.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

Criado 21 de março de 2013
Ultima resposta 22 de mar. de 2013
Respostas 7
Participantes 2