hibernate inverse属性的作用
hibernate配置文件中有這么一個(gè)屬性inverse,它是用來(lái)指定關(guān)聯(lián)的控制方的。
inverse屬性默認(rèn)是false,若為false,則關(guān)聯(lián)由自己控制,若為true,則關(guān)聯(lián)
由對(duì)方控制。
見(jiàn)例子:
一個(gè)Parent有多個(gè)Child,一個(gè)Child只能有一個(gè)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;
?}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
?<class name="com.xian.Child" table="child">
??<id name="id" column="childId">
???<generator class="native" />
??</id>
??<property name="name" type="string"></property>
??<many-to-one name="parent" column="parentId" not-null="true">
??</many-to-one>
?</class>
</hibernate-mapping>
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;
?}
?
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
?<class name="com.xian.Parent" table="parent">
??<id name="id" column="parentId">
???<generator class="native"></generator>
??</id>
??<property name="name" type="string"></property>
??<set name="children" inverse="true">
??<!-- 此處inverse設(shè)置為true,則關(guān)聯(lián)的控制方交給了child,一對(duì)多關(guān)聯(lián)一般都將控制方交給多端 -->
???<key column="parentId" not-null="true"></key>
???<one-to-many class="com.xian.Child"/>
??</set>
?</class>
</hibernate-mapping>
Parent p = new Parent();
p.setName("parent");
Child c = (Child) session.load(Child.class, 4l);? //原child表中已存在id=4的child
p.getChildren().add(p);??// 我希望用parent端來(lái)修改關(guān)聯(lián),即將id=4的child的外鍵變?yōu)楝F(xiàn)在這個(gè)parent的主鍵值
session.save(p);?//這里保存parent,同時(shí)希望關(guān)聯(lián)也得到修改
但是我們發(fā)現(xiàn)parent確實(shí)保存了,而child的外鍵還是原值,沒(méi)有關(guān)聯(lián)到我們現(xiàn)在的外鍵
原因就是我們將關(guān)聯(lián)的控制方交給了child端,這樣一來(lái)parent就不能夠控制關(guān)聯(lián)了。
Parent p = new Parent();
p.setName("parent");
Child c = (Child) session.load(Child.class, 4l);
c.setParent(p);?? //這樣由child端修改關(guān)聯(lián)就ok了?
session.save(p);
轉(zhuǎn)載于:https://www.cnblogs.com/baixingqiang/p/5834067.html
總結(jié)
以上是生活随笔為你收集整理的hibernate inverse属性的作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 还呗绑定不了储蓄卡是怎么回事?绑定失败主
- 下一篇: 招行腾讯圣斗士星矢联名信用卡手续费有哪些