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);  
       }  
    } 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值