Duvida Relacionamento Hibernate

Opa :smiley:

To refatorando um sistema e colocando o Hibernate para cuidar da persistência. Me deparei com uma situação que me deixou confuso:

  • Tenho 2 entidades: Pessoa e Origem

A entidade Origem pode ser cadastrada independente de pessoa ou pode ser vinculada a uma pessoa ( Ex.: entro em uma tela e cadastro a origem ou entro na tela Pessoa seto uma Origem pra ela )

Eu acho que esse relacionamento seria N-N correto? Se eu estiver certo, como ficaria o relacionamento no meu bean Pessoa e no meu bean Origem?

Alguém tem algum exemplo de como resolver essa situação?

[]'s

David

Uma origem pode estar em mais de uma pessoa??? E uma pessoa pode ter mais de uma origem???
Se a resposta para as duas perguntas forem sim… então é N:N…caso contrário não…

Sim para as 2 respostas :smiley:

Mas agora vem os outros problemas: como cadastrar a origem e como fica o relacionamento nos beans…nunca fiz N:N no hibernate :oops:

[quote=davidpadilha]Sim para as 2 respostas :smiley:

Mas agora vem os outros problemas: como cadastrar a origem e como fica o relacionamento nos beans…nunca fiz N:N no hibernate :oops: [/quote]
Boa documentação para ajudar: http://www.hibernate.org/hib_docs/annotations/reference/en/html/

Eu já li a documentação e tenho um pdf ( hibernate_anotacoes.pdf ) que mostrar N:N, mas eu não consegui fazer funcionar.

Eu criei 2 colecoes dentro de cada Bean:

	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name="origem_pessoa", joinColumns=@JoinColumn(name="id_origem"), inverseJoinColumns=@JoinColumn(name="id_origem"))
	private List<OrigemBean> origens = new ArrayList<OrigemBean>();

As 2 são assim…mas não sei o que fazer depois disso :frowning: haha

Um exemplo funcionando:

@ManyToMany( targetEntity = AutorImpl.class ) @JoinTable( name = "Publicacoes_Autores", joinColumns = @JoinColumn( name = "publicacao", referencedColumnName = "id" ), inverseJoinColumns = @JoinColumn( name = "autor", referencedColumnName = "id" ) ) public List<Autor> getAutores()
Para fazer funcionar precisa de 3 tabelas. As duas que se relacionam e a de relacionamento. Nesse caso contendo apenas os ids de referência para cada tabela.

bom…eu to usando o hibernate aqui, mas não to usando o annotations… faço todo o mapeamento via xml… e pra relacionamento de n:n… eu uso a tag composite-id… dá uma pesquisada sobre isso…que certamente deve ter algo parecido para o annotations, senão igual…

Meu amigo, seus problemas acabaram…

leia os dois artigos e fique trank:


Le os dois em… sem eles eu nao ia saber nada… hehe… vai por mim…

Outra coisa, com o Hibernate, tome cuidado com os relacionamentos OneToMany, ManyToMany usando List… no seu caso, acho q nao vai ter problema nao, mas se vc for usar o fetch=FetchType.EAGER, quando vc usa um List, na sua tabela de relacionamento, vai ter q ter uma coluna de Indice, o @IndexColumn.
Se no seu relacionamento, a ordem dos elementos nao importar, e o relacionamento nao puder se repetir usa um Set…