Hibernate inverse属性与cascade属性

理解:

inverse属性为false的那一端,拥有管理关系维护的权利

cascade属性指级联,说的通俗点,在cascade那端指定的操作,会影响到所关联的对象


举个例子:

班级和学生的关系是一对多

班级class类包含id,名称和学生的Set集合

学生student类包含id,姓名和班级的id(外键)


cascade属性:学生是依赖班级存在的,班级不存在,那么学生也不存在。也就是说,删除班级的同时,学生也就得删除,而不能反过来。一的那端删除时,多的那方已经没有意义了;而多的那端删除时,并不能代表一的那端没有意义。有点绕。那么属性设置是,class 设置“all",student设置“save-update”,那样,对class的操作都能影响student,对student的操作之后保存和更新才影响class。


inverse属性:这个属性是具有管理和维护权利的,在一对多的关系中,如果设置班级有这个权利,那么班级会管理维护学生集合,当保存班级时,就会更新所有学生集合里的外键属性,这不是我们想要的,当数量很多时,性能不好。而如果把这个权利交给学生时,保存班级时,就不会更新学生集合里的属性,这个外键可以由我们自己手动设置。通俗点说就是,班级如果选择学生,那么会修改学生的班级属性;如果反过来,学生选择班级,学生里的班级属性已经设置了,不用班级去操心了,世界清净了。


以上都是我个人的理解,网上看到的经验是:inverse属性一般是由多端维护,多对多的情况选择一端维护,不要两端都维护,cascade属性一般是一端设置“all”,多端设置“save-update”。


ok,世界清净了。

推荐文章

MySQL连接器/网络跟踪

MySQL连接器/网络跟踪

推荐文章

Lighthttpd-从web应用程序更新系统网络配置文件的最佳方法

Lighthttpd-从web应用程序更新系统网络配置文件的最佳方法

推荐文章

LINQ to SQL:将2列排序到一个新列中

LINQ to SQL:将2列排序到一个新列中

推荐文章

HTML空白规则的定义?

HTML空白规则的定义?

推荐文章

云与虚拟化的区别

云与虚拟化的区别

推荐文章

将图像和变量放入HTTP Post(不使用FileUpload控件)

将图像和变量放入HTTP Post(不使用FileUpload控件)

推荐文章

如何对重载函数进行单元测试?

如何对重载函数进行单元测试?

推荐文章

需要可定制的货币转换器

需要可定制的货币转换器

推荐文章

MySQL属性的增量值-有时会丢失(?)

MySQL属性的增量值-有时会丢失(?)

推荐文章

WCF中的事务范围

WCF中的事务范围

推荐文章

无法从http://www.admob.com获取发布者ID

无法从http://www.admob.com获取发布者ID

推荐文章

缺少映射的nHibernate条件查询

缺少映射的nHibernate条件查询

推荐文章

Subclipse在移动工作区后抱怨“路径不是工作副本”

Subclipse在移动工作区后抱怨“路径不是工作副本”

推荐文章

如何合并两个Git存储库?

如何合并两个Git存储库?

推荐文章

具有活动目录用户的MS访问权限

具有活动目录用户的MS访问权限

推荐文章

mysql:如何在内部联接一个表,但将联接限制为1个投票或计数最高的结果?

mysql:如何在内部联接一个表,但将联接限制为1个投票或计数最高的结果?