码迷,mamicode.com
首页 > Web开发 > 详细

hibernate中注解方式中的控制反转

时间:2017-08-02 00:31:40      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:cad   query   表之间   art   nat   employees   pid   app   方便   

都知道hibernate用xml方式配置关系时(one-to-many,many-to-many)可以添加控制反转属性 inverse=false(默认)  

即将两表之间的关系交给对方来维护.

 

inverse=true表示本方不维护关系,有对方维护关系

 

但是需注意的是,one-to-one关系是没有控制反转的,只能交由外键来维护关系.

从而导致在设置关系时,只能有外键方设置,移除关系时,只能从外键方来解除关系,删除记录时,只能先删外键方,在删主键方(save,remove,delete)

 

如果有控制反转的话,就方便的多,两表之间可以互相设置关系,互相解除关系,删除时,删除主键方时,会将外键方的外键置为空值()不过这样不推荐)

那么在hiebernate注解方式下(在没有xml配置的情况下)是如何设置控制反转的,如何在onetoMany ,manytomany中相互设置关联了?

 

当然inverse对get/query没有任何影响

 

一般控制反转(维护关系)都交给多方(外建方)来维护,学生记教室容易,教室记学生麻烦

 

原则:

1.one-to-one不添加控制反转,由外键维护关系

2.由多方维护关系,

主表方不维护主键关系

<set name="employees" inverse="true">
<key column="departmentId"></key>
<one-to-many class="Employee"/>
</set>

子表方(外键方) many to one不设置inverse属性(默认为inverse=false)  你写了反倒会出错  同理在annotation中many to one也不能写mappedBy (默认都是由对方控制的)

 

在one-to-one 双向关联中 外键方维护关系

@JoinColumn(name=" ",unique=".")  //设置外键 inverse=false

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid",unique=true)
public IdCard getIdCard() {
return idCard;
}

主键方mappedBy="子表外键对象" //inverse=true

 

many-to-many  有一方维护外键关系就行了

 

因此设置了一方关系 另一方@ManyToMany()不设置mappedBy就可以互相维护关系(但是不推荐)

mappedBy ===inverse=true

many-to-one 不写

 

hibernate中注解方式中的控制反转

标签:cad   query   表之间   art   nat   employees   pid   app   方便   

原文地址:http://www.cnblogs.com/lt123/p/7271416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!