日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate inverse属性的作用

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;
?}

}


<?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設置為true,則關聯的控制方交給了child,一對多關聯一般都將控制方交給多端 -->
???<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端來修改關聯,即將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);

轉載于:https://www.cnblogs.com/baixingqiang/p/5834067.html

總結

以上是生活随笔為你收集整理的hibernate inverse属性的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。