Pessoal,
Eu estou enfrentando um problema ao incluir ou atualizar um objeto Exame. Segue abaixo o HBM:
Exame.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.2
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="Exame"
table="exame"
>
<composite-id name="comp_id" class="ExamePK">
<key-property
name="cdUnidade"
column="cd_unidade"
type="java.lang.Integer"
length="4"
/>
<key-property
name="cdExame"
column="cd_exame"
type="java.lang.Integer"
length="4"
/>
</composite-id>
<many-to-one
name="paciente"
class="Paciente"
not-null="true"
update="false"
insert="false"
>
<column name="cd_paciente" />
<column name="cd_unidade" />
</many-to-one>
</class>
</hibernate-mapping>
O problema é que a associação com paciente não é persistida, devido ao update="false insert=“false”. Porém caso não existir essa configuração, ocorre o erro de mapeamento “org.hibernate.MappingException: Repeated column in mapping for entity: Exame column: cd_unidade (should be mapped with insert=“false” update=“false”)”.
Ou seja, exame tem como pk(cd_exame e cd_unidade) e paciente pk(cd_paciente e cd_unidade). Mas é necessário persistir a referência ao paciente ao incluir ou atualizar o exame.
Alguma idéia?
[]'s
Olá,
tente colocar a referencia as duas keys do Paciente na key do exame (e modifique a ExamePK conforme necessário)
<composite-id name="comp_id" class="ExamePK">
<key-many-to-one name="cdUnidade" column="cd_unidade"
class="Paciente" />
<key-many-to-one name="cdPaciente" column="cd_paciente"
class="Paciente" />
<key-property name="cdExame" column="cd_exame"
type="java.lang.Integer" length="4" />
</composite-id>
Olá,
Eu acho que o teu problema é de logica.
Tu tem um objeto Paciente que tem um relacionamento com Exame, provavelmente um one-to-many. E ao mesmo tempo tu tem um relacionamento many-to-one do Exame para o Paciente, por isso o hibernate obriga o update="false e o insert=“false” em um dos dois relacionamentos, tu precisa ter um unico relacionamento de atualizacao digamos assim.
Bom por que eu digo que tem problema de logica, se o que eu falei acima ta correto o que tu ta tentando fazer é adionar um Exame a um Paciente entao o correto seria tu buscar o Paciente e depois adicionar o Exame nele e apos isso persistir.
]['s
Fábio,
Na verdade eu precisaria persistir das 2 formas, ou seja, inserir o exame associando o paciente e também inserir o paciente associando os exames.
Esse problema apareceu após eu incluir o cd_unidade no PK do exame e do paciente, pois antes disso eu conseguia persistir das 2 formas, sem a necessidade do update=“false” insert=“false”.
[quote=cris_rufino]Fábio,
Na verdade eu precisaria persistir das 2 formas, ou seja, inserir o exame associando o paciente e também inserir o paciente associando os exames.
Esse problema apareceu após eu incluir o cd_unidade no PK do exame e do paciente, pois antes disso eu conseguia persistir das 2 formas, sem a necessidade do update=“false” insert=“false”.[/quote]
Olá,
Eu acho meio estranho fazer isso, mas se precisa mesmo acho que a solucao do Rodrigo da jeito no problema.
]['s
Sim tbém acho, a solução do Rodrigo poderia resolver esse caso. Mas o problema é que em “Exame” há outras associações iguais, além de paciente.
Então na verdade essa solução no meu caso não resolveria, pois eu teria que colocar no ExamePK todas essas associações.