我来到这里一个非常简单的父/子关系,它看起来像这样:休眠:如何模拟双父/子关系
电子邮件服务器有n个文件夹。 文件夹可以有n个(子)文件夹。 文件夹具有对其父文件夹及其所属电子邮件服务器的引用。
我的映射文件是这样的:
MailServer.hbm.xml
<?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.MailServer" table="MAILSERVER">
<id name="id" type="long" access="field">
<column name="MAIL_SERVER_ID" />
<generator class="native" />
</id>
<bag name="folders" table="FOLDERS" lazy="false" inverse="true" cascade="all-delete-orphan">
<key column="MAIL_SERVER_ID"></key>
<one-to-many class="test.Folder" />
</bag>
</class>
</hibernate-mapping>
Folder.hbm.xml
<?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 04.05.2011 15:02:31 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="test.Folder" table="FOLDERS">
<id name="id" type="long" access="field">
<column name="FOLDER_ID" />
<generator class="native" />
</id>
<many-to-one name="mailServer" column="MAIL_SERVER_ID" not-null="true" />
<bag name="folders" table="FOLDERS" lazy="false" inverse="true" cascade="all">
<key column="PARENT_FOLDER_ID" not-null="false"></key>
<one-to-many class="test.Folder" />
</bag>
<many-to-one name="parentFolder" column="PARENT_FOLDER_ID" />
</class>
</hibernate-mapping>
我的问题,是以下。
比方说,我有以下层次结构:
- MyMailServer
Folder1
- Folder2
Subfolder
Folder3
当我打电话hibernateSession.save(mailServerInstance);
或hibernateSession.update(mailServerInstance);
,休眠正确地把所有东西到数据库中。父列ID被正确填充。相同的所有其他参考。
但当我加载数据时,Hibernate重新加载文件夹层次结构是这样的:
- MyMailServer
Folder1
Folder2
Subfolder
Folder3
我明白其中的道理:子文件夹有其邮件服务器的参考,因此,Hibernate的广告在那儿,而不是文件夹所在的位置。
但是,我该如何解决这个问题?
在此先感谢!
我相信你所寻找的不一定是一对多的亲子关系。从数据库角度以及建模角度来看,这些都很棘手。 – 2011-05-09 12:11:33
你确定吗?如果邮件服务器可以有多个文件夹,但文件夹只能属于一个邮件服务器,那么这是一对多还是不是?文件夹和(子)文件夹相同。一个文件夹可以有多个子文件夹,但只有一个父文件夹(最多),所以这在我看来也是一对多的。 – Timo 2011-05-09 14:59:55
对不起,我误解你在说什么。 – 2011-05-09 18:14:09