最近在使用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的`getHibernateTemplate().save()`方法尝试保存数据时,如果数据没有被保存到数据库,可能有以下几个原因: 1. **事务管理**:在默认情况下,Hibernate不会自动开启和提交事务。如果在代码中没有...
- **保存/插入**:使用`Session`的`save()`或`saveOrUpdate()`方法来保存新实体到数据库。 - **更新**:对已存在的实体进行修改后,调用`Session`的`update()`方法来更新数据库。 - **删除**:通过`Session`的`...
当创建一个新实体对象并调用`saveOrUpdate`时,Hibernate会尝试将其保存到数据库中。如果对象已经存在于Session缓存中,或者其ID在数据库中存在,那么`saveOrUpdate`就会执行更新操作;反之,如果对象是新的,且没有...
在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...
而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...
save()是Hibernate早期版本中最常用的方法,用于将对象持久化到数据库中。当调用Session的save()方法时,Hibernate会为对象生成一个唯一的数据库标识(ID),并将对象的状态设置为“瞬时”到“持久化”。然而,save...
本示例将详细讲解如何实现一个简单的文件上传功能,将图片上传至服务器,并将图片的URL保存到数据库中。 首先,我们需要在Spring Boot项目中引入所需的依赖。对于文件上传,Spring Boot本身提供了`spring-boot-...
首先,`session.save()`是Hibernate中的一个关键方法,用于将一个新的或已更新的对象状态保存到数据库中。在模拟这个功能时,我们需要关注以下几点: 1. **对象状态管理**:在Hibernate中,对象有三种状态:瞬时态...
例如,保存一个新对象到数据库: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set properties... session.save(user...
例如,`save()`方法用于保存新对象到数据库,`update()`用于更新已存在的对象,`delete()`则用于删除对象。这里以`Session.save(user)`为例,表示将`User`对象持久化到数据库。 6. **提交/回滚事务**:当所有操作...
7. **添加记录操作**:在Service层,我们可以编写一个方法,该方法调用DAO的save()或saveOrUpdate()方法,将新创建的对象保存到数据库。Spring的事务管理会确保在成功保存后提交事务,如果出现异常则回滚。 8. **...
例如,通过`save()`或`saveOrUpdate()`方法保存实体,`get()`或`load()`方法获取实体,`update()`更新实体,`delete()`删除实体。 6. **事务管理**: 数据库操作通常需要在事务中进行,使用Session的`begin...
接着,创建一个实体对象并设置其属性,调用Session的`save()`或`saveOrUpdate()`方法保存对象到数据库。最后,提交事务(`Transaction.commit()`)以确保更改被永久保存。 6. **HQL(Hibernate Query Language)**:...
一旦Session执行了flush操作,相应的SQL INSERT语句就会被执行,从而将对象的数据保存到数据库中。 3. **脱管状态(Detached)**:也称为游离态。当一个持久化对象与Session的关联被断开时,它就变成了脱管状态。...
Hibernate的Session接口负责与数据库交互,如保存(save())、更新(update())和加载(load())数据。 批量上传文件时,通常会用到多文件上传功能,这需要在HTML页面上使用`<input type="file" multiple>`标签,并...
本篇文章主要关注的是如何在Hibernate 3.0版本中,通过它提供的工具自动生成POJO(Plain Old Java Object)类,这些类可以直接映射到数据库表,实现数据的存取。 1. **什么是POJO类**: POJO类是Java中简单、无...
这个例子展示了如何创建一个新的User对象,并使用Hibernate将其保存到数据库。注意,这里使用了try-with-resources语句来自动关闭Session,以遵循良好的资源管理实践。 总结: Java通过Hibernate连接数据库,大大...
将图片数据设置到实体类的属性中,然后调用`save()`或`saveOrUpdate()`方法来保存到数据库。 ```java SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory....
接着,使用`session.save(o)`将对象保存到数据库中,最后提交事务并关闭Session。这个方法适用于任何实现了Hibernate实体类的对象,只需传入待保存的对象即可。 ```java public void insert(Object o) { Session ...
例如,使用`Session.save()`或`Session.update()`方法保存或更新数据,`Query`或`Criteria` API来进行复杂查询。 8. **HQL与 Criteria 查询**:Hibernate 提供了自己的查询语言HQL,类似于SQL,但面向对象。另外,...