Problema mapeamento do hibernate

6 respostas
elvishr

Estou com um problema em um mapeamento de uma tabela no hibernate.

Tenho uma tabela que é associativa. Exemplo:

PessoaFisica

  • CodigoPessoaFisica (PK)
  • Nome
  • CPF

Telefone

  • CodigoTelefone (PK)
  • NumeroTelefone
  • TipoTelefone

PessoaFisicaTelefone

  • CodigoTelefone (PK) (FK)
  • CodigoPessoaFisica (FK)

Como fica o arquivo .hbm, o mapeamento para a tabela PessoaFisicaTelefone ?? Alguém pode me ajudar ??

Eu tinha colocado somente assim:

<hibernate-mapping> <class name="TelefonePessoaFisica" table="TelefonePessoaFisica"> <property column="CodigoPessoaFisica" length="10" name="CodigoPessoaFisica" type="integer" /> <property column="CodigoTelefone" length="10" name="CodigoTelefone" not-null="false" type="integer" /> </class> </hibernate-mapping>

mas deu erro falando q precisava de um id. Quando coloco um id não aceita porque precisa de um generator.

Alguém sabe o que devo fazer ?? :roll:

6 Respostas

Mauricio_Linhares

Iiiiiihhhh…

Acho que você não entendeu bem as associações no Hibernate, dá uma olhada nesse material daqui:

http://www.guj.com.br/java.tutorial.artigo.174.1.guj

Z

Não estou conseguindo enxergar direito esse modelo, é um many-to-many entre pessoas e telefones? Estranho, pq na tabela PessoaTelefone, só o telefone é primary key, isso tá certo?

Você não precisa criar um mapeamento exclusivo para a associação, é só declarar as associações no mapeamento de pessoas e de telefone usando many-to-one, one-to-many ou many-to-many de acordo com o seu modelo.

elvishr

Ah, eu tinha lido sobre isso.

Vi sobre colocar o <set/> o many-to-many

Mas como será feito na hora de mandar salvar??

Como vou salvar na associativa ?

Mauricio_Linhares

Se você colocar um:

cascade="save-update"

ou:

cascade="all-delete-orphan"

O próprio Hibernate se responsabilisa por retirar objetos que não estejam dentro da coleção.

elvishr

ah… entendi…

Cara, mas olha só. Só fiquei com uma dúvida

Se eu gravar um registro na PessoaFisica, depois gravar outro na Telefone.

Como vou sinalizar pro hibernate que tal PessoaFisica equivale a tal Telefone para ele gravar na associativa?? Tem algum método que eu chamo para isso??

Z

Você deve salvar nos dois lados. Mas pra evitar que o hibernate tente inserir o mesmo dado duas vezes no banco, gerando uma violação de chave, você declara um dos lados do many-to-many como inverse=“true”.

Esse parametro indica que a insersação no banco será feita quando o outro lado for salvo.

Criado 24 de junho de 2005
Ultima resposta 24 de jun. de 2005
Respostas 6
Participantes 3