我目前正在嘗試使用Hibernate創建兩個簡單的一對一映射,但不知何故它不能按我希望的方式工作。如何在休眠中乾淨地映射2個一對一的關聯
我的主要類被稱爲MailAccount和它的映射是這樣的:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 26.04.2011 14:49:15 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping package="test.account">
<class name="MailAccount" table="MAILACCOUNTS" dynamic-update="true">
<id name="id" column="MAIL_ACCOUNT_ID">
<generator class="native" />
</id>
<one-to-one name="incomingServer" cascade="all" />
<one-to-one name="outgoingServer" cascade="all" />
</class>
</hibernate-mapping>
服務器映射文件看起來是這樣的:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 02.05.2011 12:32:52 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="test.server.MailServer" table="MAILSERVER">
<id name="id" type="long" access="field">
<column name="MAIL_SERVER_ID" />
<generator class="native" />
</id>
<one-to-one name="mailAccount" class="test.account.MailAccount" foreign-key="MAIL_SERVER_ID"></one-to-one>
</class>
</hibernate-mapping>
現在,如果我讓Hibernate創建表,我幾乎可以得到我想要的東西:帶有「MAIL_ACCOUNT_ID」列的表「MailAccount」和帶有ID列的另一個表「MailServer」。
如果我打電話session.save(mailAccountInstance);
,Hibernate會正確地將數據保存到表中。
但是一旦我嘗試將數據加載到MailAccount實例中,Hibernate只會將「incomingServer」屬性加載到新的MailAccount實例中,並且outgoingServer屬性爲空。
我也不明白Hibernate如何將兩個表連接在一起,因爲表「MailServer」不保存每個服務器所屬的MailAccount的id作爲外鍵。
我該如何解決這個問題?
在此先感謝!
PS:我是很新的休眠,所以不要打我不怎麼出明顯的錯誤:-)
設置unique =「true」導致一個異常,因爲重複的條目(在這種情況下是MailAccount id),但通常您的建議有效。用MailServer.hbm.xml文件中的多對一替換一對一映射取得了訣竅!謝謝。 – Timo 2011-05-03 17:18:39