`

Hibernate中Id生成策略与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);
   }
}
分享到:
评论

相关推荐

    Hibernate生产SQL语句

    2. **属性映射(Field Mapping)**:Hibernate使用`@Id`注解定义主键,`@GeneratedValue`用于指定主键生成策略。其他属性可以通过`@ManyToOne`、`@OneToOne`、`@OneToMany`等注解定义关联关系。 3. **Session接口**...

    hibernate主键生成策略详解

    在内部,Hibernate 会调用 `org.hibernate.id.IncrementGenerator` 类中的 `generate()` 方法来获取当前主键的最大值,通常是通过执行 `SELECT MAX(idColumnName) FROM tableName` 这样的 SQL 语句来完成的。...

    Hibernate save persist merge探究

    例如,日志配置可以帮助追踪Hibernate生成的SQL语句,以便了解底层操作。此外,像HQL(Hibernate Query Language)和Criteria API这样的查询工具,也能使数据操作更加灵活高效。 总之,理解Hibernate中的save、...

    hibernate数据库通用SQL代码

    在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了与数据库的交互,使得开发者可以更专注于业务逻辑而不是底层的SQL操作。本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入...

    java操作mysql数据库,不写sql语句版

    在Java编程中,与MySQL数据库交互通常涉及到使用SQL语句来执行CRUD(创建、读取、更新、删除)操作。然而,为了提高代码的可维护性和安全性,开发者可以选择使用ORM(对象关系映射)框架,如Hibernate或MyBatis,...

    hibernate dao 生成工具

    Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者用Java对象来表示数据库中的表,通过Hibernate API进行数据操作,减少了直接编写SQL语句的工作量。DAO层则负责与Hibernate框架交互,执行CRUD(Create...

    hibernate增删改查和动态sql

    其次,“动态SQL”指的是在运行时根据业务逻辑生成不同的SQL语句,这通常用于提高代码的灵活性和可维护性。在本例中,采用了FreeMarker模板引擎来实现这一目标。 **描述解析:** 描述中提到的"采用freemarker实现...

    根据hibernate反向生成数据库的java代码

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,而无需编写大量的SQL语句。"根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括...

    Hibernate自动生成持久化类和映射文件

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它能够将数据库中的数据与Java对象进行映射,从而简化数据库操作。"Hibernate自动生成持久化类和映射文件"这个话题主要涉及如何利用...

    mysql 原生语句中save 的写法汇总.docx

    使用 Hibernate 可以使用 saveOrUpdate 方法,但是使用原生 SQL 语句时,该如何实现 save 操作呢?今天,我们将讨论 MySQL 中 save 的写法汇总。 使用 IGNORE 关键字实现数据不存在则插入,存在则无操作 在 MySQL ...

    sqlserver的hibernate

    在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的SQL语句。本教程将介绍如何使用Hibernate操作SQLServer数据库,提供一个易入门的...

    模拟hibernate的session.save()功能

    5. **SQL语句的生成与执行**:模拟`save()`方法意味着需要根据对象的状态生成对应的INSERT SQL语句,并执行它。这涉及到对SQL语法的理解以及如何从对象属性中提取值生成SQL。 6. **异常处理**:在处理数据库操作时...

    使用hibernate对sqlserver 2005进行增删改查

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式来操作数据库,而无需直接编写SQL语句。在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行...

    hibernate 配置 实体生成

    实体生成是Hibernate中的一个重要环节,它允许开发者将数据库表映射为Java类,使得我们可以通过操作对象的方式来处理数据库数据,而无需直接编写SQL语句。本文将深入探讨Hibernate配置以及如何自动生成实体类。 1. ...

    Hibernate语句

    在Java开发中,它提供了一种抽象层,允许开发者使用面向对象的方式来处理数据库交互,而无需直接编写SQL语句。接下来,我们将深入探讨Hibernate的方法使用,包括XML配置、Session管理和Criteria查询。 **一、...

    hibernate3连接sql server的例子

    `@Entity`注解标识这是一个Hibernate管理的实体类,`@Table`指定对应数据库中的表名,`@Id`和`@GeneratedValue`用于设置主键生成策略。 在实体类准备好后,我们可以创建`SessionFactory`,它是Hibernate的核心组件...

    hibernate 连接sqlserver2000

    在Java应用程序开发中,Hibernate提供了对象关系映射功能,简化了数据库操作,将Java类与数据库表关联起来,使得开发者可以避免编写大量的SQL语句。 描述中的链接指向了一个个人博客,虽然具体内容未给出,但我们...

    hibernate中文帮助文档

    9. **SQL生成与优化**: Hibernate可以自动生成SQL语句,但也可以手动定制。了解SQL可以帮助优化查询性能,尤其是在大数据量场景下。 10. **多对一、一对多、多对多关联映射**: Hibernate支持各种复杂的关联关系,如...

    Hibernate方法的实现

    类的属性与表的列建立映射,@Id注解标识主键,其他字段如@IdClass、@GeneratedValue等可以用来定义主键生成策略。 4. **会话工厂与会话** Hibernate的核心接口之一是SessionFactory,它负责创建Session对象。...

Global site tag (gtag.js) - Google Analytics