2011-01-27 32 views
1

我有三个表:项目节点item_node作为连接表,当然其中包含的项目和节点的标识。这种方法可以在Hibernate中实现多对多映射吗?

我可以映射链接表(item_node),以便相应的类ItemNode持有对Item和Node类的某种引用吗?是否有任何已知的做法在m:n关系中映射链接表?

我会想象这样的事情:

<class name="test.model.ItemNode" table="ITEM_NODE"> 
    <composite-id name="ID" class="test.model.INCompID"> 
     <key-property name="item" column="ITEM_ID" /> 
     <key-property name="node" column="NODE_ID"/> 
    </composite-id> 
</class> 

其中INCompID是复合ID类:

public class INCompID { 

private Item item; 
private Node node; 

//getters, setters and overriden 
//equals() and hashCode() methodes 
} 

项目节点已经映射和正常工作本身。

我知道这不是处理多对多关系的常用方法,但由于懒惰的初始化异常,我使用基于标准set/bag方法的问题颇为恼人,并且没有因为它们将包含大量数据(数据库表中的成千上万行),所以可以加载这些集合。
Spring AOP用于事务管理。的OpenSessionInViewFilter /拦截器似乎并不为这个特定的问题或者有帮助,所以......

回答

1

我能以这样的方式映射链接表(item_node)对应类ItemNode持有莫名其妙项和节点引用班?

你当然可以。另一种查看方法是想象ItemNode可以单独拥有一个属性(例如“sequence_no”)。因此,ItemNode本身可以有效地成为一个实体,而不仅仅是Item和Node之间的链接。

请参阅从休眠测试套件这个例子:

https://github.com/hibernate/hibernate-core/tree/master/hibernate-core/src/test/java/org/hibernate/test/manytomanyassociationclass

是否有在M映射链接表任何已知的做法:N的关系?

有个人喜好,但不是最佳实践。有些人认识到事情会发生变化,他们会为此做好准备:他们将关系映射为一个实体。然后,有人认为这种关系也应该被视为OO模型中的关系。

+0

感谢您的回复,这很有帮助 – Less 2011-01-28 09:34:46