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);  
           }  
        } 
  • 相关阅读:
    Docker初识
    57、android 应用内全局通知的实现方法
    56、使用android studio(v1.3.*)修改包名 (rename package name)
    55、android app借助友盟实现微信授权登录
    54、edittext输入类型限制为ip,inputType应该如何设置
    53、listview、expandableListview如何选中时保持高亮?
    52、sb犯的错误
    51、如何提取android代码中的字符串为系统资源文件 (I18N)
    50、转自知乎上android开发相见恨晚的接口
    49、android studio 使用技巧记录
  • 原文地址:https://www.cnblogs.com/hainange/p/6153653.html
Copyright © 2011-2022 走看看