zoukankan      html  css  js  c++  java
  • Hibernate主键生成策略与save()方法是否发sql语句的研究

        public class SessionFlushTest extends TestCase {  
          
        /**
        * 测试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);  
           }  
        } 
  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/hainange/p/6153653.html
Copyright © 2011-2022 走看看