这种方法可以在Hibernate中进行多对多映射吗?

时间:2011-01-27 13:33:43

标签: hibernate hyperlink mapping many-to-many

我有三个表:项目节点 item_node 作为链接表,当然包含项目和节点的ID。

我是否可以映射链接表( 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
}

项目节点已经映射并且可以自行运行。

我知道这不是处理多对多关系的常用方法,但我对基于标准集/包的方法有很烦人的问题,因为糟糕的延迟初始化异常,并且没有办法急切地加载这些集合,因为它们将包含大量数据(数据库表中数十万行) Spring AOP用于事务管理。 OpenSessionInViewFilter / Interceptor似乎对这个特殊问题没有帮助,所以......

1 个答案:

答案 0 :(得分:1)

  

我可以映射链接表(item_node),使得相应的类ItemNode以某种方式保存对Item和Node类的引用吗?

你确定可以。另一种查看方法是想象ItemNode可以自己保存属性(例如,“sequence_no”)。因此,ItemNode本身可以有效地成为实体,而不仅仅是Item和Node之间的链接。

从Hibernate测试套件中查看此示例:

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

  

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

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