Hibernate 測試物件的導航問題
阿新 • • 發佈:2018-12-03
Demo說明:
kind主體類和user主體類都是主控方
<!--配置關聯物件 --> <!-- set標籤 *name屬性 多的一方的集合的屬性名稱 --> <set name="users" cascade="save-update"> <!-- key標籤 *column屬性 :多的一方的外來鍵的名稱--> <key column="kinds"></key> <!-- one-to-many標籤 *class屬性:多的一方的類的全路徑 --> <one-to-many class="cn.com.dao.User" /> </set>
<many-to-one name="k_kinds" class="cn.com.dao.Kinds" column="kinds" cascade="save-update"/>
kind表有一條資訊:會計
user表裡有三條資訊;
package cn.com.test; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import cn.com.dao.Kinds; import cn.com.dao.User; import cn.com.util.Hibernate_Utils; public class Demo7 { @Test public void demo() { /* * author:命運的信徒 date:2018/12/3 aim:測試物件的導航問題 */ // 1.建立連線 Session session = Hibernate_Utils.openSession(); // 2.開啟事務、 Transaction tx = session.beginTransaction(); // 3.實體類的操作 Kinds k = new Kinds(); k.setKinds("會計"); User u = new User(); u.setName("夏之星"); u.setNumber("999"); User u1 = new User(); u1.setName("歐亞若"); u1.setNumber("888"); User u2 = new User(); u2.setName("vill"); u2.setNumber("777"); // 4 建立關係 // 4.1 u和k互聯 999 夏之星 會計 u.setK_kinds(k); // 4.2 會計 777 vill k.getUsers().add(u2); // 4.3 會計 888 歐亞若 k.getUsers().add(u1); // 5.我儲存的是4.1資料,雙方的2條資料;被控方有資料更新的同時 session.save(u); tx.commit(); session.close(); } }
原因:
session.save(uuser表中插入了999 夏之星 會計這一條資訊);被執行的時候,
user表作為主控方,被控方是kind,
存在u.setK_kinds(k); 主控方傳送增刪改,被控方也更新操作,kind插入資料會計這一條資訊;
kinds是主控方,被控方是user;
存在著 k.getUsers().add(u2); k.getUsers().add(u1); 關聯關係, 主控方傳送增刪改,被控方也更新操作,user表插入u2 u1兩條資訊;
誤區:
雖然kind和user表都是主控方,但不是說只要儲存一方操作,對kind表和user表的操作都有效;是根據建立關係來看的;
以下這個例子就可以很好的說明:
user表和kind表都是主控方
結果是kind表插入會計這一條資訊
user表插入的只有兩條資訊;u和u2
沒有u1,因為u1沒有和k建立關係;
package cn.com.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo7 {
@Test
public void demo() {
/*
* author:命運的信徒 date:2018/12/3 aim:測試物件的導航問題
*/
// 1.建立連線
Session session = Hibernate_Utils.openSession();
// 2.開啟事務、
Transaction tx = session.beginTransaction();
// 3.實體類的操作
Kinds k = new Kinds();
k.setKinds("會計");
User u = new User();
u.setName("夏之星");
u.setNumber("999");
User u1 = new User();
u1.setName("歐亞若");
u1.setNumber("888");
User u2 = new User();
u2.setName("vill");
u2.setNumber("777");
// 4 建立關係
// 4.1 u和k互聯 999 夏之星 會計
u.setK_kinds(k);
// 4.2 會計 777 vill
k.getUsers().add(u2);
// 5.我儲存的是4.1資料,雙方的2條資料;被控方有資料更新的同時
session.save(u);
tx.commit();
session.close();
}
}