我有三个表:项目,节点和 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似乎对这个特殊问题没有帮助,所以......
答案 0 :(得分:1)
我可以映射链接表(item_node),使得相应的类ItemNode以某种方式保存对Item和Node类的引用吗?
你确定可以。另一种查看方法是想象ItemNode可以自己保存属性(例如,“sequence_no”)。因此,ItemNode本身可以有效地成为实体,而不仅仅是Item和Node之间的链接。
从Hibernate测试套件中查看此示例:
在m:n关系中映射链接表是否有任何已知的做法?
有个人偏好,但不是最佳做法。有些人意识到事情可以改变,他们为此做好准备:他们将关系映射为一个实体。然后,有些人认为这种关系也应该被视为OO模型中的关系。