|
- /**
- * 測試uuid主鍵生成策略
- */
- public void testSave1() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User1 user = new User1();
- user.setName("李四");
- user.setPassword("123");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
-
- //因為user的主鍵生成側路采用的是uuid,所以調用完成save后,只是將user納入到了session的管理
- //不會發出insert語句,但是id已經生成,session中existsInDatebase狀態為false
- session.save(user);
-
- //調用flush,hibernate會清理緩存,執行sql
- //如果數據庫的隔離級別設置為為提交讀,那么我們可以看到flush過的數據
- //并且session中existsInDatebase狀態為true
- session.flush();
-
- //提交事務
- //默認情況下commit操作會先執行flush清理緩存,所以不用顯示的調用flush
- //commit后數據是無法回滾的
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
-
- /**
- * 測試native主鍵生成策略
- */
- public void testSave2() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User2 user = new User2();
- user.setName("張三1");
- user.setPassword("123");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
-
- //因為user的主鍵生成策略為native,所以調用session.save后,將執行insert語句,返回有數據庫生成的id
- //納入了session的管理,修改了session中existsInDatebase狀態為true
- //如果數據庫的隔離級別設置為為提交讀,那么我們可以看到save過的數據
- session.save(user);
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
-
-
- /**
- * 測試uuid主鍵生成策略
- */
- public void testSave3() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User1 user = new User1();
- user.setName("王五");
- user.setPassword("123");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
-
- //因為user的主鍵生成側路采用的是uuid,所以調用完成save后,只是將user納入到了session的管理
- //不會發出insert語句,但是id已經生成,session中existsInDatebase狀態為false
- session.save(user);
-
- //將user對象從session中逐出,即session的EntityEntries屬性中逐出
- session.evict(user);
-
- //無法成功提交,因為hibernate在清理緩存時,在session的insertions集合中取出user對象進行insert操作后
- //需要更新entityEntries屬性中的existsInDatabase為true,而我們采用evict已經將user從session的entityEntries
- //中逐出了,所以找不到相關數據,無法更新,拋出異常
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
-
- /**
- * 測試uuid主鍵生成策略
- */
- public void testSave4() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User1 user = new User1();
- user.setName("王五");
- user.setPassword("123");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
-
- //因為user的主鍵生成側路采用的是uuid,所以調用完成save后,只是將user納入到了session的管理
- //不會發出insert語句,但是id已經生成,session中existsInDatebase狀態為false
- session.save(user);
-
- //flush后hibernate會清理緩存,會將user對象保存到數據庫中,將session中的insertions中的user對象
- //清除,并且設置session中existsInDatebase的狀態為true
- session.flush();
-
- //將user對象從session中逐出,即session的EntityEntries屬性中逐出
- session.evict(user);
-
- //可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象
- //所以就不會發出insert語句,也不會更新session中的existsInDatabase的狀態
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
-
- /**
- * 測試native主鍵生成策略
- */
- public void testSave5() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User2 user = new User2();
- user.setName("張三11");
- user.setPassword("123");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
-
- //因為user的主鍵生成策略為native,所以調用session.save后,將執行insert語句,返回有數據庫生成的id
- //納入了session的管理,修改了session中existsInDatebase狀態為true
- //如果數據庫的隔離級別設置為為提交讀,那么我們可以看到save過的數據
- session.save(user);
-
- //將user對象從session中逐出,即session的EntityEntries屬性中逐出
- session.evict(user);
-
- //可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象
- //所以就不會發出insert語句,也不會更新session中的existsInDatabase的狀態
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
-
- /**
- * 測試assigned主鍵生成策略
- *
- */
- public void testSave6() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User3 user = new User3();
- user.setId("001");
- user.setName("張三");
-
- session.save(user);
-
- user.setName("王五");
- session.update(user);
-
- User3 user3 = new User3();
- user3.setId("002");
- user3.setName("李四");
- session.save(user3);
-
- //Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
- //Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
- //Hibernate: update t_user3 set name=?, password=?, create_time=?, expire_time=? where user_id=?
- //hibernate按照save(insert),update、delete順序提交相關操作
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
-
- /**
- * 測試assigned主鍵生成策略
- *
- */
- public void testSave7() {
- Session session = null;
- Transaction tx = null;
- try {
- session = HibernateUtils.getSession();
- tx = session.beginTransaction();
-
- User3 user = new User3();
- user.setId("003");
- user.setName("張三");
-
- session.save(user);
-
- user.setName("王五");
- session.update(user);
-
- session.flush();
-
- User3 user3 = new User3();
- user3.setId("004");
- user3.setName("李四");
- session.save(user3);
-
- //Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
- //Hibernate: update t_user3 set name=?, password=?, create_time=?, expire_time=? where user_id=?
- //Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
- //因為我們在session.udpate(user)后執行了flush,所以在清理緩存時執行flush前的sql不會生成
- //sql會按照我們的意愿執行
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- tx.rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
|