`
horizonhyg
  • 浏览: 58714 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Hibernate持久状态修改错误

阅读更多

 项目中报了identifier of an instance of com.Liuzm was altered from123 to 444搜索的答案都说是java类和Hibernate XML文件参数不一样.然后我检查文件发现是一样的无奈,就查看Hibernate的文档.最后发现和Hibernate状态有关系.因来用了 Hibernate事务大家参考此文章就会明白Hibernate对象的三种状态

 


看下我报错代码

 

CmsContent cc=baseDao.getObject(CmsContent.class,newsid[i]);
cc.setId("444");
baseDao.saveObject(cc);


如果这样就会报
identifier of an instance of com.Liuzm was altered from 123 to 444


换成以下代码:

CmsContent cc=baseDao.getObject(CmsContent.class,newsid[i]);
baseDao.getHibernateTemplate().evict(cc); //清除缓存 持久对象变成脱管对象
cc.setId("444");
baseDao.saveObject(cc);

 

这样就完成了!大家一定会问.为什么?
因为当你获取此CmsContent cc=baseDao.getObject(CmsContent.class,newsid[i]);对象时
Hibernate会把此对象的数放在缓存中,当你没有消除缓存
而对数据进行操作时.Hibernate认为你此时的操作和数据库数据
不一样.所以就会报错. 具体说明.参看下Hibernate对象的三种状态
就知道了

分享到:
评论

相关推荐

    精通Hibernate:Java对象持久化技术详解

    通过学习《精通Hibernate:Java对象持久化技术详解》,开发者能够掌握如何利用Hibernate优化数据库操作,提升开发效率,减少错误,并实现高效、可靠的Java应用程序。在实际项目中,理解并熟练运用Hibernate的各种...

    Hibernate的Session的javadoc

    了解并熟练掌握这些概念和方法,能帮助开发者更好地理解和利用Hibernate的透明持久化能力,有效地管理对象的状态和事务,从而提高应用的性能和数据一致性。对于初学者来说,阅读Hibernate的javadoc是非常有益的,...

    hibernate与mybatis一起使用取长补短

    7. **错误调试**: MyBatis的SQL日志记录功能可以帮助开发者快速定位SQL执行问题,而Hibernate的实体追踪也有助于理解对象状态和变化。 通过这种混合使用的方式,开发团队可以充分利用Hibernate的便利性和MyBatis的...

    Hibernate练习题

    - 在Hibernate中,当Session关闭时,所有与之关联的持久化对象变为游离状态。在这个例子中,Customer对象在line6变为游离状态,因为Session在这一行被关闭。 13. 优化Hibernate查询性能: - 使用缓存机制,如一级...

    hibernate的flush机制

    4. **关闭Session**:当Session被关闭时,Hibernate会自动执行Flush操作,以确保所有未提交的更改都被持久化到数据库中。 #### 错误示例分析 在给定的部分内容中,提到了一个典型的错误场景,其中包含了一个常见的...

    从头到脚跟你解释什么是Hibernate - renco的专栏

    在大多数情况下,修改对象的状态只需在程序中直接操作,然后通过Hibernate保存更改。 Hibernate的API学习曲线平缓,它无缝融入程序流程,使得数据库操作更加自然。此外,Hibernate的数据库无关性也是一个显著优点,...

    hibernate-4.2.3.required

    5. **实体生命周期**:对持久化对象的生命周期管理更加完善,如@PrePersist、@PostPersist、@PreUpdate等注解,便于在对象状态改变时执行特定操作。 6. **异步操作**:引入了异步操作的支持,使开发者可以并发处理...

    Hibernate中的merge使用详情解说.docx

    在Java的ORM框架Hibernate中,`merge()`是一个非常重要的操作,它主要用于将游离态或瞬态的对象合并到持久化状态。理解`merge()`的工作原理对于优化数据操作和避免潜在的冲突至关重要。以下是对`merge()`函数的详细...

    电子宠物(struts+hibernate)

    这涉及到后台的数据更新操作,通过Struts的动作调度和业务逻辑处理,以及Hibernate的持久化机制实现。 3. **写宠物日记**:用户可以记录与宠物的日常生活,创建和保存日记条目。这一功能可能运用到JSP(JavaServer ...

    Hibernate4实战 之第七部分

    这样可以在不修改原有类的情况下完成持久化任务。 #### 在性能瓶颈处使用硬编码的JDBC 尽管直接使用JDBC可能带来性能提升,但在决定采用这种方法之前,应先进行性能测试以确认其必要性。若确实需要使用JDBC,则...

    struts+hibernate技术整合开发的网上书店

    Struts和Hibernate是两种在Java Web开发中广泛使用的开源框架,它们分别负责表现层和持久层的管理。Struts作为MVC(Model-View-Controller)框架,主要用于处理用户请求和控制应用程序流程,而Hibernate则是一个对象...

    Hibernate 3.3主要的新特性包括

    Hibernate 3.3 在性能方面做了大量改进,包括更快的初始化、更有效的缓存策略以及更智能的对象状态管理。例如,二级缓存的性能得到显著提升,降低了数据库的负载。 5. **更友好的错误消息**: 当出现错误时,...

    hibernate大纲

    2. **更新(Update)**:修改对象状态后,调用 `session.update()` 更新数据库记录。 3. **删除(Delete)**:调用 `session.delete()` 移除数据库中的对象。 4. **加载(Load)**:通过 `session.load()` 直接获取...

    hibernate4增删查改以及配置

    事务可以确保数据的一致性,即使发生错误,也可以回滚到事务开始前的状态。 ```java Transaction transaction = session.beginTransaction(); try { // 执行数据库操作 session.save(person); transaction....

    Eclipse Hibernate Synchronizer插件操作数据库

    在使用Eclipse Hibernate Synchronizer时,开发者可以快速地将数据库结构映射到Java持久化类(POJOs),同时也能将这些类反向同步到数据库中。这在进行敏捷开发和数据库频繁调整时非常有用,因为它允许你在设计阶段...

    struts+hibernate+mysql登录验证小实例

    Struts、Hibernate和MySQL是Java Web开发中常用的三个框架,它们分别是MVC(Model-View-Controller)架构的实现、对象关系映射...通过深入研究和修改这个项目,可以进一步提升对Struts、Hibernate和MySQL的掌握程度。

    Hibernate培训教程

    Hibernate的成功在于它能够简化持久层的设计,提高开发效率,减少错误,并提供跨数据库平台的移植性。它支持事务管理、缓存策略、查询优化等高级特性,使得开发者可以轻松处理复杂的数据库操作。 **何为Hibernate**...

    hibernate

    - **对象导向应用程序中的持久化**:在面向对象的应用程序中,持久化通常涉及将对象状态转换为可以持久化存储的形式,然后再恢复回内存中的对象形式。 **1.2 对象/关系映射的不匹配** - **粒度问题**:在关系...

    用HIBERNATE开发留言板系统的设计概要

    Hibernate作为持久化框架,可以帮助我们将Java对象映射到数据库记录,简化数据操作。 #### 1.4 浏览文章 浏览文章功能允许用户查看已发布的所有文章。这可能需要分页显示,并且可能包含排序和过滤选项。通过...

Global site tag (gtag.js) - Google Analytics