Este relacionamento informa que muitos registros de uma entidade estão relacionados com muitos registros de outra entidade. No exemplo a seguir um Projeto possui muitos Funcionarios e muitos Funcionarios estão relacionados a um Projeto:
Script do banco de dados:
Modelo UML:
Um Projeto tem vários funcionarios e um Funcionario participa de vários projetos, portanto temos um relacionamento bidirecional de muitos-para-muitos.
Código fonte das classes com o relacionamento:
A entidade Projeto possui um relacionamento de muitos-para-muitos com a entidade Funcionario, para definir esta associação utilizamos a anotação javax.persistence.ManyToMany, note que utilizamos a propriedade mappedBy da anotação ManyToMany para informar que o Projeto é o dono do relacionamento.
javax.persistence.ManyToMany
Esta anotação define uma associação com outra entidade que tenha a multiplicidade de muitos-para-muitos.
Propriedades
Descrição
cascade
As operações que precisam ser refletidas no alvo da associação.
fetch
Informa se o alvo da associação precisa ser obtido apenas quando for necessário ou se sempre deve trazer.
mappedBy
Informa o atributo que é dono do relacionamento.
targetEntity
A classe entity que é alvo da associação.
A entidade Funcionario possui um relacionamento de muitos-para-muitos com a entidade Projeto, para definir esta associação utilizamos a anotação javax.persistence.ManyToMany.
Para informar que vamos utilizar a tabela PROJETO_FUNCIONARIO para realizar a associação entre PROJETO e FUNCIONARIO utilizamos a anotação javax.persistence.JoinTable.
Para informar que a coluna PROJETO_ID da tabela PROJETO_FUNCIONARIO é a coluna chave estrangeira para a tabela PROJETO e para informar que a coluna FUNCIONARIO_ID da tabela PROJETO_FUNCIONARIO é a chave estrangeira para a tabela FUNCIONARIO utilizamos a anotação javax.persistence.JoinColumn.