初学hibernate,我是这样遇到这个异常的,首先用DAO查出一个对象,然后改变该对象的一些属性,再用这个DAO去save该对象,就出现了:
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):
我开始以为如果一个对象是持久的对象,就不能再去save了,因为DB里面已经有同样主键的记录了,实际上不是这样子的,到网上也查了一下这个异常,感觉还是不是很理解。
我写了个小例子测试了下:
bean对象
public class Post {
// 编号
private long id;
// 上级ID,对于发言,此ID为0,对于回复则指向发言的ID
private long idParent;
// 发言的用户
private User user;
// 标题
private String title;
// 内容
private String content;
// 发言时间
private Date datetime;
//该主题的所有回复
private Set<Post> replyPost = new HashSet<Post>();
对应的配置文件
<id name="id" type="long">
<column name="Id" />
<generator class="native" />
</id>
<timestamp name="datetime" column="datetime"/>
<property name="title" type="string">
<column name="title" />
</property>
<property name="content" type="string">
<column name="content"/>
</property>
<many-to-one name="user" column="userid" class="net.java2000.notepad.User" cascade="save-update"/>
<property name="idParent">
<column name="idparent"/>
</property>
<set name="replyPost" table="t_post" lazy="false" inverse="true">
<key>
<column name="idparent"></column>
</key>
<one-to-many class="net.java2000.notepad.Post"/>
</set>
把datetime字段配置为时间戳。
我发现如果我用DAO去查数据时,如果数据库中对应记录的datetime字段为null,我把该记录用DAO查出来,再改变一些属性的值,再save的话,就会出现这个异常。
但是如果该记录的datetime字段的值不为null的时候,再save这个对象,可以更新成功。
同样的问题:
http://zhang-zling.iteye.com/blog/432396
分享到:
相关推荐
错误十:Exception in thread "main" org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) 错误原因:这个异常通常发生在并发...
如果不一致,说明有其他事务已经更新了数据,Hibernate会抛出`StaleObjectStateException`异常,提示用户事务冲突。 二、事务并发控制 1. 乐观锁与悲观锁:乐观锁假设冲突很少发生,只在提交时检查冲突;而悲观锁...
Hibernate的异常体系主要基于`org.hibernate`包下的异常类,如`HibernateException`、`StaleObjectStateException`等。在编程过程中,应适当地捕获并处理这些异常,确保程序的健壮性。 总结,Hibernate与MySQL的...
7. **异常处理**:Nhibernate可能会抛出各种异常,如`StaleObjectStateException`(脏数据状态)、`ObjectDeletedException`(已删除对象)等,需要适当地捕获并处理。 8. **版本控制**:确保所有开发人员使用的...
4. 异常处理:熟悉Hibernate常见的异常,如ConstraintViolationException、StaleObjectStateException等,以便于调试和问题定位。 5. 日志配置:通过日志框架(如Log4j、SLF4J)设置合适的日志级别,便于跟踪和分析...
5. **异常处理**: 捕获并处理Hibernate的特定异常,如`StaleObjectStateException`表示并发控制问题,`NonUniqueObjectException`表示违反唯一性约束等。 **总结** 《Hibernate中文开发手册详解》提供了全面的...
Hibernate抛出的异常通常继承自JDBC的SQLException,如ConstraintViolationException(违反约束),StaleObjectStateException(过时对象状态)等,需要正确捕获并处理。 通过【Hibernate_Demo】项目,开发者可以...
6. 错误调试:学会识别并解决常见的Hibernate错误,如 LazyInitializationException、StaleObjectStateException 等。 总之,《Hibernate电子版及源码》资源是Java开发者的宝贵学习资料,通过深入学习和实践,...
Hibernate的异常体系基于JDBC,如`HibernateException`、`StaleObjectStateException`等,需要合理捕获并处理。 14. 动态模型 Hibernate的`DynamicModel`允许在运行时动态创建实体,适用于不确定数据结构的场景。...
2. Hibernate框架:如 HibernateException(通用持久化异常)、StaleObjectStateException(并发修改异常)等。 3. MyBatis框架:SqlMapClientException(SQL映射客户端异常)、ResultMapException(结果映射异常)...
- Hibernate抛出的异常如`ConstraintViolationException`, `StaleObjectStateException`等,需要适当地捕获和处理。 ### 结论 Hibernate 3.2作为Java ORM框架的杰出代表,通过其丰富的功能和易用性,大大简化了...
8. 异常体系:Hibernate有自己的异常体系,如HibernateException、StaleObjectStateException等,这些异常可以帮助开发者定位和处理数据库操作中的问题。 通过对Hibernate源码的深入学习,我们可以了解其内部机制,...
在Hibernate源码中,乐观锁的实现主要依赖于`AbstractEntityPersister`类的`checkOptimisticLocking()`方法,它会比较当前对象的版本信息与数据库中的版本信息,如果不同则抛出`StaleObjectStateException`异常。...
在Java企业级开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,将数据库中的记录映射为Java对象。本文将详细介绍Hibernate持久层中的一些核心方法,包括`session.load`, `session....
在Hibernate中,乐观锁的处理主要在`org.hibernate.event.internal.DefaultMergeEventListener`和`org.hibernate.event.internal.DefaultUpdateEventListener`这两个事件监听器中完成。当调用`Session.merge()`或`...
9. 异常体系:了解Hibernate的异常体系,如HibernateException、StaleObjectStateException等,可以帮助开发者更好地处理可能出现的问题。 10. 扩展和插件:Hibernate有许多可扩展性,例如拦截器、事件监听器等,...
- Hibernate 抛出的一系列特定异常,如 `HibernateException`, `StaleObjectStateException` 等,需要在代码中适当地捕获和处理。 **9. 联合主键与复合主键** - Hibernate 支持联合主键和复合主键,可以由多个字段...
当Hibernate在更新数据时,会对比当前版本号与数据库中的版本号,如果一致则更新,否则抛出`StaleObjectStateException`异常。乐观锁的实现不需要数据库级别的锁定,降低了数据库资源的消耗,但可能导致更多的事务...
当两个客户端尝试同时修改同一份数据时,第二个客户端尝试更新数据时,如果版本号检查失败,则会抛出`StaleObjectStateException`异常。 #### 二、选择悲观锁还是乐观锁? 选择悲观锁还是乐观锁取决于具体的应用...
常见的如ConstraintViolationException(违反约束条件)和StaleObjectStateException(脏数据异常)。 这个“Hibernate 3 最新教程”详细涵盖了以上各个主题,为初学者和进阶者提供了全面的学习资源。通过深入学习...