为了账号安全,请及时绑定邮箱和手机立即绑定

inverse理解

感觉老师讲的inverse的理解有问题,inverse表示是否将控制权交给对方,为true表示交给对方,自己变成被空方。在一对多中,在一方设置inverse为true的话,g.add(stu),session.save(g),设置级联为save-update,在数据库中学生的外键其实为空,也就是说,其实在一方设置inverse为true,实际上是表示由多方维护关系,而g.add(stu)是多方在执行,所以没有维护。其实,那句update并不是多余的,见https://www.mkyong.com/hibernate/inverse-true-example-and-explanation/

正在回答

3 回答

1.(1)链接文章里有一句“In short, inverse=”true” means this is the relationship owner, and inverse=”false” (default) means it’s not.”,这句话明显与文章下面的例子呈现相反的意思,但文章的例子与老师教的是相吻合的,应该只是作者打错了而已。

(2)还有一句“Note The third statement is really NOT necessary.” 这句话表达的也是update语句是不必要的,与老师讲的也吻合。

2.我的理解

维护关系控制权指的是哪一方对关系作出的改动会生效,即引起hibernate执行更新。

维护关系影响的hibernate层面,所以无论是grade1.getStudents().add(student1);还是student1.setGrade(grade1);进行设置关联关系,inverse属性指定关联关系的控制方向与数据库是没有关系的,数据库的外键关系是在session被创建时(初始化配置文件及对象映射文件),就被确定了。

grade1.getStudents().add(student1);只是一个实例,就算没有这条语句,创建表时两张表的外键关系就已经存在了,所以对于数据库来说grade1.getStudents().add(student1);和student1.setGrade(grade1);是一样,都是相当于在添加对应实例指定具体的外键约束(没有这一步两张表的外键关系都是存在的,只是没有数据去体现,一旦有数据,因为设置了increment主键生成策略,外键也不可能为null),两个语句同时存在相当于执行了两次外间约束的设置,而方向和控制权都是hibernate层面的东西, 所以控制台反显的update sql语句确实是多余的。

参考:http://www.2cto.com/kf/201605/512903.html


0 回复 有任何疑惑可以回复我~

你可以试验一下多对多关系,比如student和teacher,新增一个中间表tea_stu,如果你把student和teacher都互相添加对方的引用,并且set的inverse属性都设置为true,tea_stu并不会自动添加外键

所谓的维护关联就是维持外键关联,然而如果把inverse都设为true,那么就是双方都不维护关联关系,所以不会自动添加外键。我这个不是提问,是纠错,建议看一下这篇文章https://www.mkyong.com/hibernate/inverse-true-example-and-explanation/,并且自己试验一下!

1 回复 有任何疑惑可以回复我~

inverse的值就是true和false,为false时表示一方维护关联关系,为true是表示多方维护关联关系!

0 回复 有任何疑惑可以回复我~
#1

soputasmile 提问者

你可以试验一下多对多关系,比如student和teacher,新增一个中间表tea_stu,如果你把student和teacher都互相添加对方的引用,并且set的inverse属性都设置为true,tea_stu并不会自动添加外键 所谓的维护关联就是维持外键关联,然而如果把inverse都设为true,那么就是双方都不维护关联关系,所以不会自动添加外键。我这个不是提问,是纠错,建议看一下这篇文章https://www.mkyong.com/hibernate/inverse-true-example-and-explanation/,并且自己试验一下!
2017-03-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Hibernate初探之一对多映射
  • 参与学习       42171    人
  • 解答问题       295    个

Hibernate中一对多关联映射配置,以及cascade和inverse属性作用

进入课程

inverse理解

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信