Para concluir o post de mapeamento de entidade com hibernate, relacionamento ManyToMany (Muitos para Muitos).
Como exemplo vamos fazer um relacionamento entre Cliente e Produto.
Vários Cliente pode ter vários Produtos e vários Produto pode ter vários Clientes.
Crie um database no banco de dados chamada manytomany.
Crie um projeto Dynamic Web Project chamado MapeamentoManyToMany adicione as lib do hibernate no projeto e configure o arquivo persistence.xml para se comunicar com a database.
persistence.xml
1.1 Crie uma classe chamada Cliente dentro do package br.com.vejajava.entidades
@Entity @Table(name="cliente") public class Cliente { @Id @GeneratedValue(strategy= GenerationType.AUTO) private Long codigo; private String nome; @ManyToMany @JoinTable(name = "cliente_produto", joinColumns = {@JoinColumn(name = "cod_cliente")}, inverseJoinColumns ={@JoinColumn(name = "cod_produto")}) private Listprodutos = new ArrayList (); //getters e setters }
Observe que no mapeamento com a classe produto temos a anotação @JoinTable essa anotação é opcional, caso você não declare ela criará o nome da classe seguida de "_" mais um novo da classe que está sendo mapeada.
Veja que temos também a anotação @JoinColumns e @InverseJoinColumns elas define o quais colunas fazem parte da chave primaria.
1.2 Crie uma classe chamada Produto dentro do package br.com.vejajava.entidades
@Entity @Table(name = "produto") public class Produto { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long codigo; private String descricao; @Column(scale = 2, precision = 4) private double preco; //getters e setters }Observe a anotação @Column seguida de scale e precision.
A anotação scale: define a quantidade de casas decimais e anotação.
A anotação precision: define a quantidade de digitos que serão armazenados.
Como estamos mostrando um relacionamento Uniderecional a classe Produto nao terá o mapeamento para a classe Cliente.
1.3 Crie uma classe ManyToMany dentro do package br.com.vejajava.principal
Vamos adicionar alguns produtos e fazer o relacionamento com os clientes.
EntityManagerFactory factory = Persistence.createEntityManagerFactory("MapeamentoManyToMany"); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); Produto p1 = new Produto(); p1.setDescricao("Açucar"); p1.setPreco(1.50); Produto p2 = new Produto(); p2.setDescricao("Macarrão Favorita"); p2.setPreco(1.50); Cliente c1 = new Cliente(); c1.setNome("Maria"); c1.getProdutos().add(p1); c1.getProdutos().add(p2); Cliente c2 = new Cliente(); c2.setNome("José"); c2.getProdutos().add(p2); manager.persist(p1); manager.persist(p2); manager.persist(c1); manager.persist(c2); manager.getTransaction().commit(); manager.close(); factory.close();
Verifique no banco de dados que foi criado três tabelas
Cliente: Temos dois cliente cadastrado.
Produto: Temos dois produtos cadastro
Cliente_Produto: Aonde o codigo do cliente se referencia ao codigo do produto, observe que no cliente Maria adicionamos dois produtos por isso na tabela ele faz o relacionamentos para os dois produtos cadastrado.
mysql> select * from cliente;
+--------+-------+
| codigo | nome |
+--------+-------+
| 1 | Maria |
| 2 | José |
+--------+-------+
mysql> select * from produto;
+--------+--------------------+-------+
| codigo | descricao | preco |
+--------+--------------------+-------+
| 1 | Açucar | 1.5 |
| 2 | Macarrão Favorita | 1.5 |
+--------+--------------------+-------+
mysql> select * from cliente_produto;
+-------------+-------------+
| cod_cliente | cod_produto |
+-------------+-------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
+-------------+-------------+
Obrigado pela visita = D
Nenhum comentário:
Postar um comentário