2012-02-07 113 views
2

递归关系,我有下面的类:坚持与Java的Hibernate的

public class MyItem { 
    private Long id; 
    private String name; 
    private Set<MyItem> similarItems = new HashSet<MyItem>(); 

    // constructors 
    // getters & setters 
} 

这意味着MyItem的实例包含同一类的其他项目的引用。

我已经创建了下面的列如下表:

[MyItem]: 
id 
name 

[MyItemRelations]: 
myItemId References MyItem 
myItemSimilarId References MyItem 

所以,我有两个问题:

  1. 是我表的结构是否正确?
  2. 我的.hbm.xml应该如何?我不知道如何实现这个关系。
+0

这些表看起来正确。你想通过xml来完成配置还是使用注释对你也好?有了注解,你可以在关系中添加一个@ ManyToMany,我猜想多个项目也可以引用相同的项目,因此在这里产生一个n:m的关系。 – Thomas 2012-02-07 21:26:58

+0

我想通过.hbm.xml进行制作 – davs 2012-02-07 21:29:44

+0

这确实看起来像人们用来表示对象图形的关系模​​型。处理图形时的关系性能相当差,特别是随着节点和边的数量增长。你可能想使用一个实际的图形数据库,比如Neo4j。 – cdeszaq 2012-02-08 13:16:09

回答

1
<set name="similarItems" table="MyItemRelations"> 
    <key column="myItemId"/> 
    <many-to-many column="myItemSimilarId" class="MyItem"/> 
</set> 
+0

我是否需要为表'MyItemRelation'声明任何休眠配置,除此集外为MyItem表? – davs 2012-02-08 22:08:55

+0

简单的链接表没有任何其他信息:**没有** – Firo 2012-02-09 08:12:02