Olá,
Existem várias maneiras de relacionar entidades. Para isso, você tem que saber a cardinalidade do relacionamento. Vou assumir que você quer que um carro possa ter vários seguros, e um seguro possa estar associado a vários carros, caracterizando um “n para n”, ou “muitos para muitos”.
Caso você não queira guardar nenhuma tributo extra na join table (a tabela intermediária, CarroSeguro
nesse caso), você pode utilizar o mapeamento @ManyToMany
. O JPA Provider (Hibernate, Eclipselink, etc) vai criar a join table automaticamente para você no banco de dados (caso ele esteja gerando as tabelas).
Funciona mais ou menos assim:
class Carro {
//...
@ManyToMany
private Set<Seguro> seguros;
//...
}
class Seguro {
//...
@ManyToMany(mappedBy = "seguros")
private Set<Carro> carros;
//...
}
Dessa forma, o JPA vai criar uma tabela no banco chamada de algo como carro_seguro, com as chaves primárias dessas duas entidades, associando-as. Repare que não é necessário criar uma classe intermediária CarroSeguro
nesse caso.
Quando você associar e persistir entidades desses tipos, o jpa vai popular a join table para você. Tipo assim:
//...
Carro carro = entityManager.find(Carro.class, 1L); // busca carro com id 1
Seguro seguro = entityManager.find(Seguroc.class, 50L); // busca seguro com id 50
carro.addSeguro(seguro); // associa o seguro ao carro
//...
Dessa forma, no DB, na join table, vai aparecer a seguinte linha:
carro_id | seguro_id
1 | 50
Da próxima vez que você buscar esse carro, assim:
Carro carro = entityManager.find(Carro.class, 1L);
e pegar os seguros desse carro:
carro.getSeguros();
Ali vai aparecer o seguro com id 50
, dentro da coleção.
O mesmo vale para a entidade Seguro
, que vai trazer os carros associados dentro de seu conjunto carros
.
Também existem outras anotações, como @ManyToOne
, @OneToMany
e @OneToOne
, para fazer o mapeamento das outras cardinalidades e funcionam de maneira parecida, com a exceção de que não é necessária a criação de uma join table em relacionamentos que não são @ManyToMany
(mas pode ser feito, caso você queira).
Recomendo que você estude os fundamentos do JPA antes de tentar utiliza-lo, porque os conceitos precisam estar bem claros na tua cabeça na hora de implementar, seja para fazer certo, seja para saber resolver problemas no caso de dar algo errado. Utilizar de forma equivocada pode te trazer mais dor de cabeça do que facilidade.
Se você souber inglês, existe um livro sensacional chamado Pro JPA 2, que explica detalhadamente o funcionamento da ferramenta. Não é muito difícil achar o PDF pra baixar, caso você não queira comprar. Em português eu não conheço nenhum material com essa qualidade, mas existem cursos online que podem te ajudar.
Boa sorte!