`
zhangyou1010
  • 浏览: 303745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate异常 org.hibernate.StaleObjectStateException: Row was updated or deleted

阅读更多
初学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
0
0
分享到:
评论
1 楼 wp0615032 2013-08-21  
因为那个timestamp是一个乐观锁,每次更新时这个填要带上

相关推荐

    hibernate错误汇总

    错误十:Exception in thread "main" org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) 错误原因:这个异常通常发生在并发...

    Hibernate中,利用版本管理机制来控制事务并发

    如果不一致,说明有其他事务已经更新了数据,Hibernate会抛出`StaleObjectStateException`异常,提示用户事务冲突。 二、事务并发控制 1. 乐观锁与悲观锁:乐观锁假设冲突很少发生,只在提交时检查冲突;而悲观锁...

    hibernate04.zip

    Hibernate的异常体系主要基于`org.hibernate`包下的异常类,如`HibernateException`、`StaleObjectStateException`等。在编程过程中,应适当地捕获并处理这些异常,确保程序的健壮性。 总结,Hibernate与MySQL的...

    Nhibernate

    7. **异常处理**:Nhibernate可能会抛出各种异常,如`StaleObjectStateException`(脏数据状态)、`ObjectDeletedException`(已删除对象)等,需要适当地捕获并处理。 8. **版本控制**:确保所有开发人员使用的...

    hibernate应用包

    4. 异常处理:熟悉Hibernate常见的异常,如ConstraintViolationException、StaleObjectStateException等,以便于调试和问题定位。 5. 日志配置:通过日志框架(如Log4j、SLF4J)设置合适的日志级别,便于跟踪和分析...

    hibernate中文开发手册详解

    5. **异常处理**: 捕获并处理Hibernate的特定异常,如`StaleObjectStateException`表示并发控制问题,`NonUniqueObjectException`表示违反唯一性约束等。 **总结** 《Hibernate中文开发手册详解》提供了全面的...

    Hibernate_Demo

    Hibernate抛出的异常通常继承自JDBC的SQLException,如ConstraintViolationException(违反约束),StaleObjectStateException(过时对象状态)等,需要正确捕获并处理。 通过【Hibernate_Demo】项目,开发者可以...

    Hibernate电子版及源码

    6. 错误调试:学会识别并解决常见的Hibernate错误,如 LazyInitializationException、StaleObjectStateException 等。 总之,《Hibernate电子版及源码》资源是Java开发者的宝贵学习资料,通过深入学习和实践,...

    hibernate各种操作

    Hibernate的异常体系基于JDBC,如`HibernateException`、`StaleObjectStateException`等,需要合理捕获并处理。 14. 动态模型 Hibernate的`DynamicModel`允许在运行时动态创建实体,适用于不确定数据结构的场景。...

    java错误大全,详细解释

    2. Hibernate框架:如 HibernateException(通用持久化异常)、StaleObjectStateException(并发修改异常)等。 3. MyBatis框架:SqlMapClientException(SQL映射客户端异常)、ResultMapException(结果映射异常)...

    Hibernate3.2帮助文档

    - Hibernate抛出的异常如`ConstraintViolationException`, `StaleObjectStateException`等,需要适当地捕获和处理。 ### 结论 Hibernate 3.2作为Java ORM框架的杰出代表,通过其丰富的功能和易用性,大大简化了...

    hibernate_src

    8. 异常体系:Hibernate有自己的异常体系,如HibernateException、StaleObjectStateException等,这些异常可以帮助开发者定位和处理数据库操作中的问题。 通过对Hibernate源码的深入学习,我们可以了解其内部机制,...

    Hibernate悲观锁和乐观锁的实现

    在Hibernate源码中,乐观锁的实现主要依赖于`AbstractEntityPersister`类的`checkOptimisticLocking()`方法,它会比较当前对象的版本信息与数据库中的版本信息,如果不同则抛出`StaleObjectStateException`异常。...

    Hibernate持久层方法汇总

    在Java企业级开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,将数据库中的记录映射为Java对象。本文将详细介绍Hibernate持久层中的一些核心方法,包括`session.load`, `session....

    Hibernate version 乐观锁 (xml方式)

    在Hibernate中,乐观锁的处理主要在`org.hibernate.event.internal.DefaultMergeEventListener`和`org.hibernate.event.internal.DefaultUpdateEventListener`这两个事件监听器中完成。当调用`Session.merge()`或`...

    hibernate_reference

    9. 异常体系:了解Hibernate的异常体系,如HibernateException、StaleObjectStateException等,可以帮助开发者更好地处理可能出现的问题。 10. 扩展和插件:Hibernate有许多可扩展性,例如拦截器、事件监听器等,...

    Hibernate3.3 中文参考手册(1)(2)

    - Hibernate 抛出的一系列特定异常,如 `HibernateException`, `StaleObjectStateException` 等,需要在代码中适当地捕获和处理。 **9. 联合主键与复合主键** - Hibernate 支持联合主键和复合主键,可以由多个字段...

    Hibernate乐观锁和悲观锁分析

    当Hibernate在更新数据时,会对比当前版本号与数据库中的版本号,如果一致则更新,否则抛出`StaleObjectStateException`异常。乐观锁的实现不需要数据库级别的锁定,降低了数据库资源的消耗,但可能导致更多的事务...

    Hibernate.lock()方法中各种锁的区别.docx

    当两个客户端尝试同时修改同一份数据时,第二个客户端尝试更新数据时,如果版本号检查失败,则会抛出`StaleObjectStateException`异常。 #### 二、选择悲观锁还是乐观锁? 选择悲观锁还是乐观锁取决于具体的应用...

    hibernate3 最新教程 pdf

    常见的如ConstraintViolationException(违反约束条件)和StaleObjectStateException(脏数据异常)。 这个“Hibernate 3 最新教程”详细涵盖了以上各个主题,为初学者和进阶者提供了全面的学习资源。通过深入学习...

Global site tag (gtag.js) - Google Analytics