我目前正在尝试使用Hibernate创建两个简单的一对一映射,但不知怎的,它不能像我想要的那样工作。
我的主要类名为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创建表,我得到的就是我想要的:一个表“MailAccount”,其列为“MAIL_ACCOUNT_ID”,另一个表“MailServer”也带有一个id列。
如果我调用session.save(mailAccountInstance);
,Hibernate会正确地将数据保存到表中。
但是一旦我尝试将数据加载到MailAccount实例中,Hibernate只会将“incomingServer”属性加载到新的MailAccount实例中,并且outgoingServer属性为空。
我也不明白Hibernate如何将两个表连接在一起,因为表“MailServer”不会将每个服务器所属的MailAccount的id保存为外键。
我该如何解决这个问题?
提前致谢!
Ps:我对Hibernate很新,所以不要因为明显的错误而打败我: - )
答案 0 :(得分:2)
我建议您查看Hibernate参考手册中的Association Mappings chapter。对于bidirectional one-to-one mapping,建议在一端使用<one-to-one>
,在另一端使用<many-to-one unique="true">
。