国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hibernate與oracle級聯添加和加載策略

2019-11-08 02:24:18
字體:
來源:轉載
供稿:網友

/** * 測試級聯添加和加載策略 */public class AddCascadeTest {	public static void main(String[] args) {//		t1();//1.在Hibernate中實現添加Dept級聯添加Emp//		t2();//2.在scott賬戶下級聯保存一個姓名為'李四',部門編號為"10"的員工//		t3();//3.測試加載策略,默認為延遲加載。在session中查詢數據庫(session沒有關閉)//		t4();//4.測試加載策略,默認為延遲加載。在session關閉后查詢數據庫(session已經關閉)		t5();//5.測試加載策略,設為延遲加載。在session關閉后查詢數據庫(session已經關閉)	}1、打開MyEclipse,創建一個新的java項目,命名為Hibernate_Oracle_AddCascade

2、打開oracle數據庫連接,并在MyEclipse中的DB Browser新建一個數據庫連接,名為scott

3、在java項目中,新建一個lib目錄,再選中java項目導入hibernate框架

查看生成的hibernate.cfg.xml文件

4、添加Hibernate框架后,反向生成映射類和映射文件

再次查看生成的hibernate.cfg.xml文件

5、選中Dept.hbm.xml和Dept.java文件,修改屬性類型

查看Dept.java文件和Dept.hbm.xml文件

6、在hibernate.cfg.xml添加打印sql語句

7.測試級聯添加和加載策略,這是主方法

/** * 測試級聯添加和加載策略 */public class AddCascadeTest {	public static void main(String[] args) {//		t1();//1.在Hibernate中實現添加Dept級聯添加Emp//		t2();//2.在scott賬戶下級聯保存一個姓名為'李四',部門編號為"10"的員工//		t3();//3.測試加載策略,默認為延遲加載。在session中查詢數據庫(session沒有關閉)//		t4();//4.測試加載策略,默認為延遲加載。在session關閉后查詢數據庫(session已經關閉)		t5();//5.測試加載策略,設為延遲加載。在session關閉后查詢數據庫(session已經關閉)	}測試方法一:

	/**	 * 1.在Hibernate中如何實現添加Dept級聯添加Emp?<br/>	 * 分析<br/>	 * 建立從Dept到Emp的一對多關聯<br/>	 * 在<set>標簽中配置cascade屬性為all<br/>	 * 例:在scott賬戶下添加一個部門,并同時向部門中添加2個員工<br/>	 */	PRivate static void t1() {		Configuration config = new Configuration().configure();		SessionFactory sessionFactory = config.buildSessionFactory();		Session session = sessionFactory.openSession();		Transaction transaction = session.beginTransaction();		//scott賬戶dept表下添加一個部門		Dept dept = new Dept();		dept.setDname("研發一部");		dept.setLoc("武漢軟件新城");				//給新添加的部門添加兩個新員工				//1.添加新員工張無忌,部門為研發一部		Emp newEmp1 = new Emp();		newEmp1.setEname("張無忌");		newEmp1.setDept(dept);		//2.添加新員工張三豐,部門為研發一部		Emp newEmp2 = new Emp();		newEmp2.setEname("張三豐");		newEmp2.setDept(dept);				//在部門表中級聯添加員工		dept.getEmps().add(newEmp1);		dept.getEmps().add(newEmp2);				//持久化保存		session.save(dept);						transaction.commit();		session.close();		sessionFactory.close();			}運行結果:

查詢數據庫,結果如下:

這是因為在Dept.hbm.xml中沒有設置級聯操作,打開Dept.hbm.xml設置

再次運行,插入部門并級聯添加員工成功。

查詢數據庫,插入成功。

測試方法二:

	/**	 * 2.在scott賬戶下級聯保存一個姓名為'李四光',部門編號為"10"的員工	 */	private static void t2() {		Configuration config = new Configuration().configure();		SessionFactory sessionFactory = config.buildSessionFactory();		Session session = sessionFactory.openSession();		Transaction transaction = session.beginTransaction();		//咋scott賬戶emp表下添加一個新員工,姓名為'李四光'		Emp emp = new Emp();		emp.setEname("李四光");		//通過session獲取部門編號為10的部門		Dept dept = (Dept) session.get(Dept.class, 10);		//將獲得的部門編號添加到新員工		emp.setDept(dept);		//持久化保存		session.save(emp);				transaction.commit();		session.close();		sessionFactory.close();			}運行結果:

查詢數據庫:

測試方法三:

	/**	 * 3.測試加載策略<br/>	 * 默認為延遲加載。<br/>	 * 如果<class>元素的lazy屬性為true。表示采用延遲加載;<br/>	 * 如果lazy屬性為false,表示采用立即加載<br/>	 * 	 * 此處測試在session沒有關閉時,查詢數據庫采用延遲加載的結果	 */	private static void t3() {		Configuration config = new Configuration().configure();		SessionFactory sessionFactory = config.buildSessionFactory();		Session session = sessionFactory.openSession();		Transaction transaction = session.beginTransaction();				//通過session獲取部門編號為10的部門		Dept dept = (Dept) session.get(Dept.class, 10);		//打印部門編號為10的部門名稱,lazy  true/false  類級別		System.out.println(dept.getDname());				/**		 * 查詢數據庫(session沒有關閉)		 */		//打印部門編號為10的emp表中的員工		for(Object o : dept.getEmps()){			Emp emp = (Emp) o;			System.out.println(emp.getEname()+"/t/t"+emp.getDept().getDeptno());		}				transaction.commit();		session.close();		sessionFactory.close();			}運行結果:

測試方法四:

	/**	 * 4.測試加載策略<br/>	 * 默認為延遲加載。<br/>	 * 在session關閉后查詢數據庫(session已經關閉)<br/>	 * 如果<class>元素的lazy屬性為true。表示采用延遲加載;<br/>	 * 如果lazy屬性為false,表示采用立即加載<br/>	 * 	 * 此處測試在session關閉時,查詢數據庫采用延遲加載的結果	 */	private static void t4() {		Configuration config = new Configuration().configure();		SessionFactory sessionFactory = config.buildSessionFactory();		Session session = sessionFactory.openSession();		Transaction transaction = session.beginTransaction();				//通過session獲取部門編號為10的部門		Dept dept = (Dept) session.get(Dept.class, 10);		//打印部門編號為10的部門名稱,lazy  true/false  類級別		System.out.println(dept.getDname());						transaction.commit();		session.close();		sessionFactory.close();		/**		 * 查詢數據庫(session已經關閉)		 */		//打印部門編號為10的emp表中的員工		for(Object o : dept.getEmps()){			Emp emp = (Emp) o;			System.out.println(emp.getEname()+"/t/t"+emp.getDept().getDeptno());		}	}運行出錯,在session關閉后,不能查詢oracle數據庫。

異常信息為no session or session was closaed.沒有session或session已關閉。

測試方法五:

	/**	 * 5.測試加載策略<br/>	 * 默認為延遲加載。<br/>	 * 如果<class>元素的lazy屬性為true。表示采用延遲加載;<br/>	 * 如果lazy屬性為false,表示采用立即加載<br/>	 * 	 * 此處測試在session關閉時,查詢數據庫采用'立即加載'的結果	 */	private static void t5() {		Configuration config = new Configuration().configure();		SessionFactory sessionFactory = config.buildSessionFactory();		Session session = sessionFactory.openSession();		Transaction transaction = session.beginTransaction();				//通過session獲取部門編號為10的部門		Dept dept = (Dept) session.get(Dept.class, 10);		//打印部門編號為10的部門名稱,lazy  true/false  類級別		System.out.println(dept.getDname());						transaction.commit();		session.close();		sessionFactory.close();		/**		 * 查詢數據庫(session已經關閉)		 */		//打印部門編號為10的emp表中的員工		for(Object o : dept.getEmps()){			Emp emp = (Emp) o;			System.out.println(emp.getEname()+"/t/t"+emp.getDept().getDeptno());		}	}

在Dept.hbm.xml中的<set>標簽中添加lazy屬性,屬性值為false,采用立即加載策略。

運行測試方法五,結果如下:

可以看到,程序運行成功。說明立即加載策略在session關閉后依然能訪問數據庫。

最后在說一個,在“多對一”中lazy屬性的值為

<!-- 多對一many-to-one -->lazy屬性:no-proxy 無代理延遲加載           proxy延遲加載,默認為 proxy           false立即加載-->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中山市| 永平县| 淮安市| 弋阳县| 七台河市| 柘城县| 楚雄市| 凉山| 宣恩县| 九寨沟县| 卓资县| 新蔡县| 修武县| 松滋市| 永春县| 壶关县| 轮台县| 庆阳市| 孝感市| 汾阳市| 廉江市| 探索| 剑川县| 子洲县| 平遥县| 福鼎市| 贺州市| 奉贤区| 荥阳市| 双桥区| 长岛县| 庐江县| 宿松县| 苏尼特左旗| 瑞丽市| 绥化市| 益阳市| 永新县| 六枝特区| 沾化县| 化州市|