首页 > 代码库 > hibernate中注解方式中的控制反转

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

都知道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中注解方式中的控制反转