hibernate inverse属性的作用
Posted 杨荣林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate inverse属性的作用相关的知识,希望对你有一定的参考价值。
hibernate inverse属性的作用
hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的。
inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联
由对方控制。
见例子:
一个Parent有多个Child,一个Child只能有一个Parent。
package com.xian;
public class Child {
private Long id;
private String name;
private Parent parent;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
}
package com.xian;
import java.util.HashSet;
import java.util.Set;
public class Parent {
private Long id;
private String name;
private Set children = new HashSet();
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getChildren() {
return children;
}
public void setChildren(Set children) {
this.children = children;
}
}
Parent p = new Parent();
p.setName("parent");
Child c = (Child) session.load(Child.class, 4l); //原child表中已存在id=4的child
p.getChildren().add(p); // 我希望用parent端来修改关联,即将id=4的child的外键变为现在这个parent的主键值
session.save(p); //这里保存parent,同时希望关联也得到修改
但是我们发现parent确实保存了,而child的外键还是原值,没有关联到我们现在的外键
原因就是我们将关联的控制方交给了child端,这样一来parent就不能够控制关联了。
Parent p = new Parent();
p.setName("parent");
Child c = (Child) session.load(Child.class, 4l);
c.setParent(p); //这样由child端修改关联就ok了
session.save(p);以上是关于hibernate inverse属性的作用的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate inverse和cascade的作用和区别
Hibernate中的inverse
Hibernate inverse属性与cascade属性
Hibernate 配置文件属性之 级联操作cascade 性能优化inverse
hibernate中inverse的用法
一口一口吃掉Hibernate——Hibernate中inverse的用法