背景:
普通的java项目,单独添加hibernate框架,不添加其他任何框架的情况下。
分析:
没有使用事务管理模式,myEclipse的反向工程生成的dao的save方法
public void save(Cigarette transientInstance) {
log.debug("saving Cigarette instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
并不能说这个没有添加事务管理模式,只不过这么写他有的时候灵有的时侯不灵,那我们改为显示的提交事务就成了!
public void save(Cigarette transientInstance) {
log.debug("saving Cigarette instance");
Transaction transaction= getSession().beginTransaction();
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
transaction.commit();
getSession().flush();
getSession().close();
}
结论:
hibernate成功执行sava且不报错后,数据库中没有数据的原因:hibernate 必须显示的声明提交事务
JDBC默认的是自动提交
Hibernian默认的是手动提交,必须开启事务,手动提交,否则数据库中没有保存的记录:
Transaction transaction= getSession().beginTransaction();
getSession().save(transientInstance);
transaction.commit();
以上总结了网上的资料,自己实践得出结论
分享到:
相关推荐
`getSession()`方法获取当前Session,`beginTransaction()`和`commit()`分别用于开始和提交事务,而`save()`方法用于保存实体到数据库。 最后,我们可以在Service或Controller中注入UserDAO,调用其方法来实现业务...
只有当满足特定条件时,Hibernate才会触发Flush操作,将这些缓存中的更改同步到数据库中。 #### 触发Flush的条件 Flush操作通常在以下几种情况下被触发: 1. **显式调用**:开发人员可以直接调用`session.flush()...
- 当调用`getSession().save(c)`时,hibernate会根据对象`Customer`和映射文件生成相应的SQL语句,然后执行这些SQL以完成对象的保存。 8. **流行ORM框架** - Hibernate因其强大功能和成熟度而受到广泛欢迎,它...
3. `addUser` 方法演示了如何添加用户,通过 `Session` 对象的 `save()` 方法保存实体到数据库。 这些内容涵盖了 Hibernate 的基础配置、映射文件的编写以及如何进行基本的数据库操作。对于进一步学习 Hibernate,...
6. **运行案例**:最后,创建一个主程序,实例化`User`对象并调用`saveUser`方法将其保存到数据库。运行程序后,你将在MySQL数据库中看到新插入的数据。 ```java public class Main { public static void main...
此配置文件是Hibernate初始化过程中的关键组成部分,它定义了应用程序与数据库交互的基本配置信息。尽管默认情况下文件名为`hibernate.cfg.xml`,但开发者可以根据需要自定义该文件的名称或存储位置。如果选择自定义...
在实际应用中,我们经常需要将大量数据插入到数据库中,例如数据迁移、数据同步、数据备份等场景。在这些场景中,如果使用传统的 INSERT 语句逐条插入数据,会导致性能下降和内存溢出问题。因此,使用批量更新机制...
1. **show_sql**: 这个属性用于控制Hibernate是否会在执行SQL语句时将其输出到控制台。设置为`true`可以帮助开发者调试SQL语句。 - 示例:`show_sql=true` 2. **hibernate.cfg.xml**: 是Hibernate的核心配置文件,...
在这段配置中,指定了User类映射到数据库中的user表,id字段为数据库表中的id列,并设置了一个主键生成策略。name属性和birthday属性也被定义,并分别与数据库表的name和birthday列映射。 文档接下来介绍了...
1. **由 Domain Object 到 mapping 到 db**:这是官方推荐的方式,先设计好业务对象,然后编写映射文件,最后映射到数据库中对应的表。 2. **由 DB 开始**:通过反向工程工具,如 Hibernate Tools,根据数据库表自动...
Hibernate是一个开源的对象关系映射(ORM)框架,它能够将Java对象映射到数据库表中,并管理这些对象的生命周期。本篇文章主要介绍利用Hibernate框架来实现基本的功能操作,包括登录验证、查询、增加、修改以及删除...
当我们调用`session.save(obj)`时,Hibernate会为这个对象生成一个唯一的标识符(通常是主键),并将对象的状态保存到数据库中。如果对象是新创建的,那么它会被添加到数据库;如果对象已经存在于数据库中,那么它的...
在本章的“最经典的Hibernate教程_从入门到精通3”中,我们将深入探讨Hibernate的关联映射,这是ORM框架中的关键概念。关联映射允许我们建立对象模型与数据库表之间的关系,使得数据操作更加方便。 首先,让我们...
Hibernate是一种Java持久化框架,它能够将面向对象模型映射到数据库表中。通过使用Hibernate,开发者可以极大地减少编写传统JDBC代码的工作量,并且能够更好地处理数据库交互逻辑。Hibernate的目标在于提供一种简单...
在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....
#### 一、保存了一个父对象,但是它的关联对象没有保存到数据库中 在Hibernate中,当我们保存一个实体时,如果该实体与其他实体有关联关系(如一对多或多对一),那么可能遇到的问题是,尽管父实体被成功保存到了...
关联映射是Hibernate的重要特性,它允许我们将实体之间的关系映射到数据库表之间的关系。例如: 1. **一对一关联**:一个实体对应另一个实体的唯一实例,如员工与身份证号。可以通过在映射文件中添加`one-to-one`...