`

hibernate save没有保存数据到数据库

阅读更多

最近在使用MyEclipse进行项目开发的时侯,发现使用其自带的Hibernate 反向工程生成的dao文件的save方法不能入库:

解决方法如下:

1:首先是主键自增问题:

一般我们常用的主键自增主要是一下几种:

increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。
identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。
sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。
native
Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

详细见:http://fengzhiyu-sh.iteye.com/blog/183393即可

主要是要使自己的数据库要与符合对应的主键自增方式!!!一般改为“native”是不会出错的!

2:没有使用事务管理模式,仔细看myEclipse的反向工程生成的dao的save方法:

         public void save(EtpDynamicValue transientInstance) {
          log.debug("saving EtpDynamicValue instance");

          try {
   
                  getSession().save(transientInstance);

                  log.debug("save successful");
          } catch (RuntimeException re) {
                  log.error("save failed", re);
                  throw re;
          }
        }

并不能说这个没有添加事务管理模式,只不过你这么写他有的时候灵有的时侯不灵,那我们改为显示的提交事务(如下)就成了!!!我也觉得很奇怪啊!!!

        public void save(EtpDynamicValue transientInstance) {
          log.debug("saving EtpDynamicValue instance");
        
Transaction tran=getSession().beginTransaction();
          try {
   
                  getSession().save(transientInstance);

                  log.debug("save successful");
          } catch (RuntimeException re) {
                  log.error("save failed", re);
                  throw re;
          }
         
tran.commit();
          getSession().flush();
         getSession().close();
}

以上蓝色为添加的部分!!!

 

hibernate执行sava后,数据库中没有数据的原因:

hibernate 必须显示的声明提交事务

 

JDBC默认的是自动提交
Hibernian默认的是手动提交,必须开启事务,手动提交,否则数据库中没有保存的记录:
eg:
            Transaction tx = getSession().beginTransaction();
            getSession().save(transientInstance);
            tx.commit();

分享到:
评论

相关推荐

    hibernate保存不到数据1

    当使用Hibernate的`getHibernateTemplate().save()`方法尝试保存数据时,如果数据没有被保存到数据库,可能有以下几个原因: 1. **事务管理**:在默认情况下,Hibernate不会自动开启和提交事务。如果在代码中没有...

    hibernate数据库相关操作步骤

    - **保存/插入**:使用`Session`的`save()`或`saveOrUpdate()`方法来保存新实体到数据库。 - **更新**:对已存在的实体进行修改后,调用`Session`的`update()`方法来更新数据库。 - **删除**:通过`Session`的`...

    hibernate 的saveOrUpdate

    当创建一个新实体对象并调用`saveOrUpdate`时,Hibernate会尝试将其保存到数据库中。如果对象已经存在于Session缓存中,或者其ID在数据库中存在,那么`saveOrUpdate`就会执行更新操作;反之,如果对象是新的,且没有...

    Hibernate下数据批量处理解决方案

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    Hibernate save persist merge探究

    save()是Hibernate早期版本中最常用的方法,用于将对象持久化到数据库中。当调用Session的save()方法时,Hibernate会为对象生成一个唯一的数据库标识(ID),并将对象的状态设置为“瞬时”到“持久化”。然而,save...

    使用Springboot上传图片并将URL保存到数据库中

    本示例将详细讲解如何实现一个简单的文件上传功能,将图片上传至服务器,并将图片的URL保存到数据库中。 首先,我们需要在Spring Boot项目中引入所需的依赖。对于文件上传,Spring Boot本身提供了`spring-boot-...

    模拟hibernate的session.save()功能

    首先,`session.save()`是Hibernate中的一个关键方法,用于将一个新的或已更新的对象状态保存到数据库中。在模拟这个功能时,我们需要关注以下几点: 1. **对象状态管理**:在Hibernate中,对象有三种状态:瞬时态...

    hibernate框架下对oracle数据库操作所需jar包.zip

    例如,保存一个新对象到数据库: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set properties... session.save(user...

    Hibernate操作数据库的步骤

    例如,`save()`方法用于保存新对象到数据库,`update()`用于更新已存在的对象,`delete()`则用于删除对象。这里以`Session.save(user)`为例,表示将`User`对象持久化到数据库。 6. **提交/回滚事务**:当所有操作...

    spring+hibernate整合实现简单数据库添加记录

    7. **添加记录操作**:在Service层,我们可以编写一个方法,该方法调用DAO的save()或saveOrUpdate()方法,将新创建的对象保存到数据库。Spring的事务管理会确保在成功保存后提交事务,如果出现异常则回滚。 8. **...

    HIbernate免注解实现操作数据库 及Hibernate3连接SQL的BUG解决办法

    例如,通过`save()`或`saveOrUpdate()`方法保存实体,`get()`或`load()`方法获取实体,`update()`更新实体,`delete()`删除实体。 6. **事务管理**: 数据库操作通常需要在事务中进行,使用Session的`begin...

    hibernate入门数据简单插入

    接着,创建一个实体对象并设置其属性,调用Session的`save()`或`saveOrUpdate()`方法保存对象到数据库。最后,提交事务(`Transaction.commit()`)以确保更改被永久保存。 6. **HQL(Hibernate Query Language)**:...

    hibernate的各种保存方式的区别

    一旦Session执行了flush操作,相应的SQL INSERT语句就会被执行,从而将对象的数据保存到数据库中。 3. **脱管状态(Detached)**:也称为游离态。当一个持久化对象与Session的关联被断开时,它就变成了脱管状态。...

    struts2+hibernate(文件批量上传至数据库+Ajax分页显示)

    Hibernate的Session接口负责与数据库交互,如保存(save())、更新(update())和加载(load())数据。 批量上传文件时,通常会用到多文件上传功能,这需要在HTML页面上使用`<input type="file" multiple>`标签,并...

    hibernate3.0 和数据库生成pojo类的工程方法

    本篇文章主要关注的是如何在Hibernate 3.0版本中,通过它提供的工具自动生成POJO(Plain Old Java Object)类,这些类可以直接映射到数据库表,实现数据的存取。 1. **什么是POJO类**: POJO类是Java中简单、无...

    java利用hibernate连接数据库

    这个例子展示了如何创建一个新的User对象,并使用Hibernate将其保存到数据库。注意,这里使用了try-with-resources语句来自动关闭Session,以遵循良好的资源管理实践。 总结: Java通过Hibernate连接数据库,大大...

    Hibernate将图片插入数据库

    将图片数据设置到实体类的属性中,然后调用`save()`或`saveOrUpdate()`方法来保存到数据库。 ```java SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory....

    hibernate数据库通用SQL代码

    接着,使用`session.save(o)`将对象保存到数据库中,最后提交事务并关闭Session。这个方法适用于任何实现了Hibernate实体类的对象,只需传入待保存的对象即可。 ```java public void insert(Object o) { Session ...

    hibernate基本jar包(数据库是Oracle)

    例如,使用`Session.save()`或`Session.update()`方法保存或更新数据,`Query`或`Criteria` API来进行复杂查询。 8. **HQL与 Criteria 查询**:Hibernate 提供了自己的查询语言HQL,类似于SQL,但面向对象。另外,...

Global site tag (gtag.js) - Google Analytics