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);  
           }  
        } 
  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/hainange/p/6153653.html
Copyright © 2011-2022 走看看