Hibernate - Problem bei Mapping

y0dA

Erfahrenes Mitglied
Hi!
Also ich habe 2 Tabellen:
Code:
Client
Personal_Name
Nun ist es so dass Client einen FK von Personal_Name hat und es hierbei auch nur einen Personal_Name zu einem Client geben kann.

Wie realisiere ich hierbei das Mapping?

Habe es wie folgt versucht (jedoch wird dann beim speichern eines Client Objektes der FK zu Personal_Name nicht gesetzt!):

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
	package="org.pcd.wam.gegenstandsbereich.tmcHibernate.model.web">
	<class name="Client" table="CLIENT">
		<!-- primary key -->
		<id name="id" type="integer" column="CL_ID">
			<generator class="increment" />
		</id>
		<many-to-one name="contactDetail"
			class="org.pcd.wam.gegenstandsbereich.tmcHibernate.model.locating.ContactDetail"
			column="CL_CD_ID" lazy="false" />
		<many-to-one name="organisation"
			class="org.pcd.wam.gegenstandsbereich.tmcHibernate.model.locating.Organisation"
			column="CL_O_ID" lazy="false" />
		<one-to-one name="personalName"
			class="org.pcd.wam.gegenstandsbereich.tmcHibernate.model.web.PersonalName"
			lazy="false">
		</one-to-one>
	</class>
</hibernate-mapping>

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
	package="org.pcd.wam.gegenstandsbereich.tmcHibernate.model.web">
	<class name="PersonalName" table="PERSONAL_NAME">
		<!-- primary key -->
		<id name="id" type="integer" column="PN_ID">
			<generator class="increment" />
		</id>
		<property name="forename" type="string" column="PN_FORENAME" />
		<property name="surname" type="string" column="PN_SURNAME" />
	</class>
</hibernate-mapping>
 
Hiho,
soweit ich weiß, funktioniert so ein Mapping nur wenn beide Tabellen den selber PK haben...

Siehe : http://www.xylax.net/hibernate/onetoone.html

Lösen kannst du das Problem, indem du entweder die beiden PK gleich benennst, oder aber ein etwas vagemutig aussehendes Mapping verwendest :

Code:
<many-to-one name="bar" class="Bar" column="bar_id" unique="true"/>

Durch unique wird das many in many-to-one quasi "kastriert" =) Wenn du das ganze dann noch in beide Richtungen haben willst reicht eine one-to-one Beziehung in der referenzierten Tabelle:

Code:
<one-to-one name="foo" class="Foo" property-ref="bar"/>

Ich hoffe ich konnte dir helfen =)
 

Neue Beiträge

Zurück