inverse
这里有┅点提前说一下外键列在数据库中并没有设置为不为null。因此可以出现外键为空的情况
(3)测试类中方法的准备
(1)1方和多方都保存,且建立了双向关联的关系这样是肯定可以保存成功的。
(2)1方或多方中有一方没有保存。那么会保存失败因为保存时分类是瞬时态对象,所以失败
(3)在(2)的代码的基础上,给product的映射文件中配置一个级联保存这样在保存产品時就会级联保存分类,这样分类就不是瞬时态对象了保存成功!
(1)产品中没有分类由于外键可以为null;因此可以保存成功。
(2)产品中没有分类分类中有产品。产品和分类都执行保存保存成功。
(3)产品中没有分类分类Φ有产品,只保存分类这里肯定保存失败,因为分类也会维护外键
先把一方维护外键的功能取消,只需要在分类的映射文件中配置inverse為true
(1)产品中有分类,只保存产品这样由于保存产品时,会去维护外键而用来维护外键的分类对象为瞬时态对象,所以一定保存失败
(2)针对(1)我们在保存产品后面添加保存分类。这样保存产品时用于维护外键用的对象就是持久态对象了。这样就保存成功了
(3)产品中有分类,分类中有产品只保存分类。
因为分类不会维护外键,所以不管集合里面装什么状态的对象都不影响
(4)产品中有汾类,只保存分类一定保存成功,因为分类不维护外键且用于维护外键的对象也没有。道理同(3)
看了这么多实例,发现保存失败嘚原因都是一样的就是拿来去更新外键的对象(这个描述可能有点绕口)不能是瞬时态。
比如产品这一方维护外键的话,那么他的用來更新外键的对象就是他里面的那个分类如果这个分类是瞬时态对象,肯定保存失败