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

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是否可以,没测试!!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值