相关疑难解决方法(0)

Hibernate3:自引用对象

需要一些帮助来理解如何做到这一点; 我将在文件系统上运行递归"查找",并且我希望将信息保存在单个数据库表中 - 具有自引用的层次结构:

这是我要填充的数据库表结构.

目录表:

id       int NOT NULL,
name     varchar(255) NOT NULL,
parentid int NOT NULL);
Run Code Online (Sandbox Code Playgroud)

这是我想要映射的Java类(仅显示字段):

public DirObject {
    int id;
    String name;
    DirObject parent;
...
Run Code Online (Sandbox Code Playgroud)

对于'root'目录,将使用parentid = 0; real id将从1开始,理想情况下我希望hibernate自动生成id.

有人可以为此提供建议的映射文件; 作为第二个问题,我考虑过像这样做Java类:

public DirObject {
    int id;
    String name;
    List<DirObject> subdirs;
Run Code Online (Sandbox Code Playgroud)

我可以对这两种方法中的任何一种使用相同的数据模型吗?(当然使用不同的映射文件).

---更新:所以我尝试了下面建议的映射文件(谢谢!),在此重复以供参考:

<hibernate-mapping>
    <class name="my.proj.DirObject" table="category">
        ...   

        <set name="subDirs" lazy="true" inverse="true">
            <key column="parentId"/>
            <one-to-many class="my.proj.DirObject"/>
        </set>

        <many-to-one name="parent"
                     class="my.proj.DirObject"
                     column="parentId" cascade="all" />
    </class>
Run Code Online (Sandbox Code Playgroud)

...并且改变了我的Java类以使'parentid'和'getSubDirs'[返回'HashSet'].

这似乎有用 - 谢谢,但这是我用来驱动它的测试代码 - 我想我在这里没做什么,因为我认为Hibernate将负责保存Set中的从属对象而不必我做这明确吗?

DirObject dirobject=new DirObject();
   dirobject.setName("/files");
   dirobject.setParent(dirobject);

   DirObject …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate self-reference

4
推荐指数
1
解决办法
3849
查看次数

标签 统计

hibernate ×1

java ×1

orm ×1

self-reference ×1