1. 程式人生 > >Hibernate 測試物件的導航問題

Hibernate 測試物件的導航問題

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();

	}
}