Hibernate高级实体关联映射之多值的实体关联(多对多关联的两种思路之二)

来源:互联网 发布:org.apache.poi jar包 编辑:程序博客网 时间:2024/06/04 18:37
Hibernate高级实体关联映射之多值的实体关联(多对多关联的两种思路之二)
hibernate反对多对多关联的使用,因为联结表中的额外列通常是不可能避免的。如果联结表有一些额外的列,而不只是两个外键列时,该怎么办?我们可以用一对多模拟多对多的关系。可以用两种常用的策略把这样一种结构映射到java类。第一种策略需要一个用于联结表的中间实体类,并通过一对多的关联而被映射。第二种策略通过给联结表使用一个值类型的类来利用组件的集合。
我们实现第二个策略:把联结表映射到组件的集合

pom.xml:
 
resources/hibernate.cfg.xml:
 
pojo/Teacher.java:
 
pojo/Teacher.hbm.xml:
 
pojo/Student.java:
 
pojo/Student.hbm.xml:
 
pojo/MyClass.java:
 
util/HibernateUtil.java:
 
util/Manager.java:
 
表结构:
 
输出sql:
 

要解除链接,就从集合中移除该元素。不需要额外的级联设置,如:
t.getMyClassList().add(my);
t.getMyClassList().remove(my);
注意:这种方法的缺点在于无法启用双向导航:根据定义,组件不可能有共享的引用。现在t可以导航到my,但s不可能做到,s不并知道my.但是,你可以编写一个查询来获取所需的对象。
这个例子是用bag实现的,使用set也可以实现。但不确定map,list是否可以,没测试!!!!!
原创粉丝点击