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);
}
}
分享到:
相关推荐
2. **属性映射(Field Mapping)**:Hibernate使用`@Id`注解定义主键,`@GeneratedValue`用于指定主键生成策略。其他属性可以通过`@ManyToOne`、`@OneToOne`、`@OneToMany`等注解定义关联关系。 3. **Session接口**...
在内部,Hibernate 会调用 `org.hibernate.id.IncrementGenerator` 类中的 `generate()` 方法来获取当前主键的最大值,通常是通过执行 `SELECT MAX(idColumnName) FROM tableName` 这样的 SQL 语句来完成的。...
例如,日志配置可以帮助追踪Hibernate生成的SQL语句,以便了解底层操作。此外,像HQL(Hibernate Query Language)和Criteria API这样的查询工具,也能使数据操作更加灵活高效。 总之,理解Hibernate中的save、...
在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了与数据库的交互,使得开发者可以更专注于业务逻辑而不是底层的SQL操作。本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入...
在Java编程中,与MySQL数据库交互通常涉及到使用SQL语句来执行CRUD(创建、读取、更新、删除)操作。然而,为了提高代码的可维护性和安全性,开发者可以选择使用ORM(对象关系映射)框架,如Hibernate或MyBatis,...
Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者用Java对象来表示数据库中的表,通过Hibernate API进行数据操作,减少了直接编写SQL语句的工作量。DAO层则负责与Hibernate框架交互,执行CRUD(Create...
其次,“动态SQL”指的是在运行时根据业务逻辑生成不同的SQL语句,这通常用于提高代码的灵活性和可维护性。在本例中,采用了FreeMarker模板引擎来实现这一目标。 **描述解析:** 描述中提到的"采用freemarker实现...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,而无需编写大量的SQL语句。"根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它能够将数据库中的数据与Java对象进行映射,从而简化数据库操作。"Hibernate自动生成持久化类和映射文件"这个话题主要涉及如何利用...
使用 Hibernate 可以使用 saveOrUpdate 方法,但是使用原生 SQL 语句时,该如何实现 save 操作呢?今天,我们将讨论 MySQL 中 save 的写法汇总。 使用 IGNORE 关键字实现数据不存在则插入,存在则无操作 在 MySQL ...
在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的SQL语句。本教程将介绍如何使用Hibernate操作SQLServer数据库,提供一个易入门的...
5. **SQL语句的生成与执行**:模拟`save()`方法意味着需要根据对象的状态生成对应的INSERT SQL语句,并执行它。这涉及到对SQL语法的理解以及如何从对象属性中提取值生成SQL。 6. **异常处理**:在处理数据库操作时...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式来操作数据库,而无需直接编写SQL语句。在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行...
实体生成是Hibernate中的一个重要环节,它允许开发者将数据库表映射为Java类,使得我们可以通过操作对象的方式来处理数据库数据,而无需直接编写SQL语句。本文将深入探讨Hibernate配置以及如何自动生成实体类。 1. ...
在Java开发中,它提供了一种抽象层,允许开发者使用面向对象的方式来处理数据库交互,而无需直接编写SQL语句。接下来,我们将深入探讨Hibernate的方法使用,包括XML配置、Session管理和Criteria查询。 **一、...
`@Entity`注解标识这是一个Hibernate管理的实体类,`@Table`指定对应数据库中的表名,`@Id`和`@GeneratedValue`用于设置主键生成策略。 在实体类准备好后,我们可以创建`SessionFactory`,它是Hibernate的核心组件...
在Java应用程序开发中,Hibernate提供了对象关系映射功能,简化了数据库操作,将Java类与数据库表关联起来,使得开发者可以避免编写大量的SQL语句。 描述中的链接指向了一个个人博客,虽然具体内容未给出,但我们...
9. **SQL生成与优化**: Hibernate可以自动生成SQL语句,但也可以手动定制。了解SQL可以帮助优化查询性能,尤其是在大数据量场景下。 10. **多对一、一对多、多对多关联映射**: Hibernate支持各种复杂的关联关系,如...
类的属性与表的列建立映射,@Id注解标识主键,其他字段如@IdClass、@GeneratedValue等可以用来定义主键生成策略。 4. **会话工厂与会话** Hibernate的核心接口之一是SessionFactory,它负责创建Session对象。...