从开始接触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,前面说的游离态对象出来了。所以如果你在你的业务方法里,额外查询了一次的时候,就会报错了。
分享到:
相关推荐
a different object with the same identifier value was already associated with the session 是一种常见的异常,通常是由于在 Hibernate 中同一个 session 里面有了两个相同标识但是是不同实体所致。解决方案有...
5. `a different object with the same identifier value was already associated with the session` 这个异常表明在同一个Hibernate Session中存在两个具有相同标识但实际是不同对象的情况。处理方法有: - 使用`...
**Different Object with Same Identifier Value** **异常描述:** 此异常表示同一个Session中存在具有相同标识符的不同对象实例。 **解决方法:** - 使用`session.clear()`清除Session缓存。 - 调用`session....
在本教程中,我们将深入探讨Hibernate框架中的一个核心概念——对象标识符(Object Identifier)。通过本篇教程的学习,您将了解到对象标识符在Hibernate中的重要性以及如何正确地为持久化对象设置标识符。此外,我们...
数字对象标识符(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 ...
- 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 ...
- 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 ...
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 ...
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 ...
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...
错误八:Exception in thread "main" org.hibernate.HibernateException: More than one row with the given identifier was found: 1, for class: org.model.User 错误原因:这个错误表示在尝试获取主键为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...
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 ...
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 ...
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错误及其解决办法: 1. **内存溢出 (error1: Out of memory)**:当MATLAB运行时需要的内存超过了系统可用的内存,就会出现这个错误。解决方法包括优化代码以减少内存消耗,关闭不必要的...
C++常见错误汇总 本文总结了C++编程中常见的错误类型,并提供了相应的解决方法。这些错误包括编译错误、连接错误和语法错误等。了解这些错误类型和解决方法对C++程序员来说非常重要,可以帮助他们快速诊断和解决...
### 常见Hibernate面试题知识点详解 #### 1. Hibernate查询数据的方式 - **导航对象图查询**:这是最基本的查询方式之一,适用于查询对象之间的关联关系。通过已知对象来导航到其他对象,比如通过一个`User`对象...