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);  
       }  
    } 

转载于:https://www.cnblogs.com/hainange/archive/2012/03/16/6153653.html

Hibernate主键生成策略与save()方法是否发sql语句的研究相关推荐

  1. JavaEE持久层框架对比与hibernate主键生成策略总结

    一.持久层框架对比 ORM框架:即对象关系映射.它把数据库表映射到pojo类,然后通过对类的操作来实现对数据库的增删改查,sql语句自动生成. 对于代码开发者来说,就是在代码里先创建数据库连接对象,然 ...

  2. 基于按annotation的hibernate主键生成策略

    这里讨论代理主键,业务主键(比如说复合键等)这里不讨论. 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id ...

  3. JPA实体注解与hibernate主键生成策略

    JPA实体注解与hibernate主键生成策略 用hibernate注解开发项目,对于主键的生成策略有些模糊,下面是从新浪网里面看到的一篇关于hibernate注解以及主键生成策略的文章,值得一看: ...

  4. jpa基于按annotation的hibernate主键生成策略

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器  通过annotation来映射hibernate实体的,基于annotation的hi ...

  5. Hibernate主键生成策略总结(这里面讲的很详细)

    Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通 ...

  6. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

  7. Hibernate主键生成策略总结

    Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通 ...

  8. 常用Hibernate 主键生成策略(徐瑞文)

    ORM映射基本原理 1. 基于相同实体类和表,实现相互映射,类的对象对应了表中的记录,不同对象对应不同的记录,不同的记录对应不同的对象 2. 表中不同的记录通过主键来区分,不同的对象通过对象id来区分 ...

  9. hibernate主键生成策略 问题

    转载自:https://www.jianshu.com/p/79311d81e77f 首先,如果出现这个问题你很有可能就是没有很好的注意到主键的生成策略.说到这里是不是就像去看看主键的生成呢? 在.h ...

最新文章

  1. Java微信对账接口返回值解析
  2. 都说 HashMap 是线程不安全的,到底体现在哪儿?
  3. bind函数polyfill源码解析
  4. 包概念与__init__注意事项
  5. html下拉框选择后自动刷新,html select 下拉框刷新页面后保留上一次选择的值
  6. 画面测试时,图片显示时,0件与N件的意义!
  7. “商圈合伙人”让异业联盟无边界化,打造共赢生态圈
  8. 运动控制加减速算法(一)
  9. JDK各版本新特性(完整版)
  10. Python学习笔记之疑问 1:def 是什么意思
  11. 计算机四级-数据库工程师(数据库原理部分)
  12. c语言航标知识点,书摘:迷惘时的航标——“人生哲学”
  13. Pixelmator Pro 2.1.2 图像处理软件
  14. 2022-2028年中国固体浮力材料行业竞争现状及投资决策建议报告
  15. css实现三角形对话框,三角形图案
  16. 微信公众平台停用服务器配置,1.微信公众号服务器配置启用
  17. power bi -分组累计求和
  18. golang字符串拼接方式
  19. 90 后高管:“下不手开除 70、80 后,公司死了谁负责?”
  20. 谷露Gllue联合领英LinkedIn,发布猎头行业中高端招聘大数据观察

热门文章

  1. 计算机桌面上的声音图标没了怎么办,Win7电脑右下角声音图标不见了怎么办?...
  2. python 读取word_教你怎么使用 Python 对 word文档 进行操作
  3. 关于“数据分析”如何快速入门一些基本思路
  4. 互联网日报 | 华为Mate40系列国内发布;陆金所在纽交所挂牌上市;苹果大中华区营收大降28.6%...
  5. LeetCode MySQL刷题——day3
  6. 有一个3x4的矩阵,输出最大值,且输出对应的行和列;
  7. usb接口linux系统设计,AUFS 联合文件系统 - 基于USB接口的微型桌面Linux系统设计
  8. oracle中synonym是什么,请问一下在racle里synonym的作用是什么?
  9. python格式化字符串%r_Python语法速查:3.字符串格式化
  10. 程序员,也需要学习分析与设计的方法?! (2)