`
maoxy
  • 浏览: 141275 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 中getSession().save() 保存不到数据库 解决办法

阅读更多
背景:
普通的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();



以上总结了网上的资料,自己实践得出结论
2
0
分享到:
评论
2 楼 maoxy 2010-10-13  
yuantong 写道
但凡接触过H的人都知道啊


我刚知道
1 楼 yuantong 2010-10-10  
但凡接触过H的人都知道啊

相关推荐

    springboot集成hibernate

    `getSession()`方法获取当前Session,`beginTransaction()`和`commit()`分别用于开始和提交事务,而`save()`方法用于保存实体到数据库。 最后,我们可以在Service或Controller中注入UserDAO,调用其方法来实现业务...

    hibernate的flush机制

    只有当满足特定条件时,Hibernate才会触发Flush操作,将这些缓存中的更改同步到数据库中。 #### 触发Flush的条件 Flush操作通常在以下几种情况下被触发: 1. **显式调用**:开发人员可以直接调用`session.flush()...

    我见过的最好的最详细的hibernate3.6.X学习资料(汤阳光)

    - 当调用`getSession().save(c)`时,hibernate会根据对象`Customer`和映射文件生成相应的SQL语句,然后执行这些SQL以完成对象的保存。 8. **流行ORM框架** - Hibernate因其强大功能和成熟度而受到广泛欢迎,它...

    Hibernate较完整资料

    3. `addUser` 方法演示了如何添加用户,通过 `Session` 对象的 `save()` 方法保存实体到数据库。 这些内容涵盖了 Hibernate 的基础配置、映射文件的编写以及如何进行基本的数据库操作。对于进一步学习 Hibernate,...

    hibernate简单案例

    6. **运行案例**:最后,创建一个主程序,实例化`User`对象并调用`saveUser`方法将其保存到数据库。运行程序后,你将在MySQL数据库中看到新插入的数据。 ```java public class Main { public static void main...

    hibernate中的相关组件的介绍

    此配置文件是Hibernate初始化过程中的关键组成部分,它定义了应用程序与数据库交互的基本配置信息。尽管默认情况下文件名为`hibernate.cfg.xml`,但开发者可以根据需要自定义该文件的名称或存储位置。如果选择自定义...

    Hibernate中大量数据的更新

    在实际应用中,我们经常需要将大量数据插入到数据库中,例如数据迁移、数据同步、数据备份等场景。在这些场景中,如果使用传统的 INSERT 语句逐条插入数据,会导致性能下降和内存溢出问题。因此,使用批量更新机制...

    Hibernate笔记总结

    1. **show_sql**: 这个属性用于控制Hibernate是否会在执行SQL语句时将其输出到控制台。设置为`true`可以帮助开发者调试SQL语句。 - 示例:`show_sql=true` 2. **hibernate.cfg.xml**: 是Hibernate的核心配置文件,...

    hibernate学习笔记定义.pdf

    在这段配置中,指定了User类映射到数据库中的user表,id字段为数据库表中的id列,并设置了一个主键生成策略。name属性和birthday属性也被定义,并分别与数据库表的name和birthday列映射。 文档接下来介绍了...

    hibernate主要知识点

    1. **由 Domain Object 到 mapping 到 db**:这是官方推荐的方式,先设计好业务对象,然后编写映射文件,最后映射到数据库中对应的表。 2. **由 DB 开始**:通过反向工程工具,如 Hibernate Tools,根据数据库表自动...

    hibernate基本功能

    Hibernate是一个开源的对象关系映射(ORM)框架,它能够将Java对象映射到数据库表中,并管理这些对象的生命周期。本篇文章主要介绍利用Hibernate框架来实现基本的功能操作,包括登录验证、查询、增加、修改以及删除...

    hibernate入门实例封装了HibernateUtil

    当我们调用`session.save(obj)`时,Hibernate会为这个对象生成一个唯一的标识符(通常是主键),并将对象的状态保存到数据库中。如果对象是新创建的,那么它会被添加到数据库;如果对象已经存在于数据库中,那么它的...

    最经典的hibernate教程_从入门到精通3(hbiernate学习)

    在本章的“最经典的Hibernate教程_从入门到精通3”中,我们将深入探讨Hibernate的关联映射,这是ORM框架中的关键概念。关联映射允许我们建立对象模型与数据库表之间的关系,使得数据操作更加方便。 首先,让我们...

    hibernate笔记

    Hibernate是一种Java持久化框架,它能够将面向对象模型映射到数据库表中。通过使用Hibernate,开发者可以极大地减少编写传统JDBC代码的工作量,并且能够更好地处理数据库交互逻辑。Hibernate的目标在于提供一种简单...

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    hibernate常见异常针对于jpa

    #### 一、保存了一个父对象,但是它的关联对象没有保存到数据库中 在Hibernate中,当我们保存一个实体时,如果该实体与其他实体有关联关系(如一对多或多对一),那么可能遇到的问题是,尽管父实体被成功保存到了...

    Hibernate入门

    关联映射是Hibernate的重要特性,它允许我们将实体之间的关系映射到数据库表之间的关系。例如: 1. **一对一关联**:一个实体对应另一个实体的唯一实例,如员工与身份证号。可以通过在映射文件中添加`one-to-one`...

Global site tag (gtag.js) - Google Analytics