`
leobluewing
  • 浏览: 240949 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Hibernate常见错误 a different object with the same identifier value was already

 
阅读更多
从开始接触hibernate起

a different object with the same identifier value was already associated with the session

这个错误就一直时不时出现,以前自己也研究过,也经常被同事经常问起。这两天又被问了,干脆记一下。

错误原因很简单,就是英文的字面意思。hibernate不知道保存哪个对象。

那么到底是如何导致的呢?从头说起。

hibernate生命周期有三态,Transient(瞬时),Persist(持久) 和 Detached(游离)。

简单来看报错的场景:
Object obj = new Object(); //obj是瞬时态

obj.setId("xxxxxxxxx"); //如果new的时候给了Id,那么为游离态

Object obj1 = session.get(Object.class,"xxxxxxxxx"); //从数据库里加载一个obj,为持久态。


所以,当内存里同时有obj 和 obj1存在的情况下,如果你执行了

session.saveOrUpate(obj); //注意是obj 不是 obj1


那么hibernate将会把obj转变为持久态,但是此时内存里有一个持久态的obj1。于是报错了。


以上是原理,那么一般是怎么引起这种情况的呢? 从前台说起。

web提交的一般过程如下:form --> servlet

数据从form提交到后台时,在页面上都是以字符串形式存在,那么当后台我们需要处理的时候

不可能写这样的代码


public void doMybiz(String id,String name,String value1,String value2...){
         ..
}


一定是希望直接获得对象来处理

public void doMybiz(Object obj){
         ..
}


所以,很多的前端框架都做了这样的事情,即将页面上的数据组装成对象给后台。

一般来说,都是直接new出来的,然后进行赋值。

so,前面说的游离态对象出来了。所以如果你在你的业务方法里,额外查询了一次的时候,就会报错了。




分享到:
评论

相关推荐

    hibernate常见异常

    a different object with the same identifier value was already associated with the session 是一种常见的异常,通常是由于在 Hibernate 中同一个 session 里面有了两个相同标识但是是不同实体所致。解决方案有...

    hibernate常见问题及处理.doc

    5. `a different object with the same identifier value was already associated with the session` 这个异常表明在同一个Hibernate Session中存在两个具有相同标识但实际是不同对象的情况。处理方法有: - 使用`...

    hibernate常见错误解决方案

    **Different Object with Same Identifier Value** **异常描述:** 此异常表示同一个Session中存在具有相同标识符的不同对象实例。 **解决方法:** - 使用`session.clear()`清除Session缓存。 - 调用`session....

    Hibernate Tutorial 03 (Object Identifier).pdf

    在本教程中,我们将深入探讨Hibernate框架中的一个核心概念——对象标识符(Object Identifier)。通过本篇教程的学习,您将了解到对象标识符在Hibernate中的重要性以及如何正确地为持久化对象设置标识符。此外,我们...

    The Digital Object Identifier initiative: metadata implications

    数字对象标识符(Digital Object Identifier,简称DOI)是一种持久性标识符,用于唯一地标识数字资源,如学术文章、数据集等。DOI系统由国际DOI基金会管理,并在出版界广泛采用。随着数字资源的增加以及对资源描述的...

    计算机网络第六版答案

    In these systems, packets are transmitted over the same wireless infrastructure used for cellular telephony, with the base station thus being managed by a telecommunications provider. This provides ...

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - FIX: The value of some string flex-properties that began with a parenthese or curly bracket had no apostrophe at the end; that caused an error when reading. (fixed TPropList.SavePropValue for the ...

    S7A驱动720版本

    - When the signal conditioning function "S&M" was used for a byte value, the driver wrote wrong values to the PLC. Build 223 : New Functions: - The number of supported NetLinks has been ...

    微软内部资料-SQL性能优化3

    Another type of table lock is a schema stability lock (Sch-S) and is compatible with all table locks except the schema modification lock (Sch-M). The schema modification lock (Sch-M) is incompatible ...

    NewSID(光学习一下代码就可以了,没看清楚介绍别运行)

    When the SID is found in a value it is replaced with the new computer SID, and when the SID is found in a name, the key and its subkeys are copied to a new subkey that has the same name except with ...

    微软内部资料-SQL性能优化5

    Each index row in node pages contains an index key (or set of keys for a composite index) and a pointer to a page at the next level for which the first key value is the same as the key value in the ...

    hibernate错误解决方案

    ### Hibernate 错误解决方案 #### 一、概述 在使用Hibernate框架进行开发的过程中,经常会遇到各种各样的异常问题。这些问题可能会导致程序无法正常运行,甚至影响到系统的稳定性。本文将针对几个常见的Hibernate...

    hibernate错误汇总

    错误八:Exception in thread "main" org.hibernate.HibernateException: More than one row with the given identifier was found: 1, for class: org.model.User 错误原因:这个错误表示在尝试获取主键为1的实体...

    Hibernate Reference Documentation3.1

    10.9. Replicating object between two different datastores 10.10. Flushing the Session 10.11. Transitive persistence 10.12. Using metadata 11. Transactions And Concurrency 11.1. Session and transaction...

    servlet2.4doc

    Adds a response header with the given name and value. addIntHeader(String, int) - Method in class javax.servlet.http.HttpServletResponseWrapper The default behavior of this method is to call ...

    VclZip pro v3.10.1

    This was due to a problem where it would be freed automatically if there was a problem with the ArchiveStream when trying to open it as a zip file (possibly corrupt). Best practice is that ...

    developing android application with adobe air.part3.rar

    EXIF Data and the Map Object The speed Property Conclusion Chapter 11 : Microphone and Audio The Microphone Audio Assets Working with Sounds ID3 Tags Modifying Sound Raw Data and the Sound Spectrum ...

    matlab常见错误总结

    以下是一些常见的MATLAB错误及其解决办法: 1. **内存溢出 (error1: Out of memory)**:当MATLAB运行时需要的内存超过了系统可用的内存,就会出现这个错误。解决方法包括优化代码以减少内存消耗,关闭不必要的...

    C++常见错误汇总.doc

    C++常见错误汇总 本文总结了C++编程中常见的错误类型,并提供了相应的解决方法。这些错误包括编译错误、连接错误和语法错误等。了解这些错误类型和解决方法对C++程序员来说非常重要,可以帮助他们快速诊断和解决...

    常见hibernate面试题.doc

    ### 常见Hibernate面试题知识点详解 #### 1. Hibernate查询数据的方式 - **导航对象图查询**:这是最基本的查询方式之一,适用于查询对象之间的关联关系。通过已知对象来导航到其他对象,比如通过一个`User`对象...

Global site tag (gtag.js) - Google Analytics