- 浏览: 207247 次
- 性别:
- 来自: 北京
-
最新评论
-
LinApex:
什么垃圾东西
通用操作日志系统设计。一次编写,所有项目共同使用! -
LinApex:
模版化SQL
谈谈IBatis的动态SQL应该改进的架构设计! -
许助云:
还在么,我今天尝试了这种方法,报错:严重: cann't ge ...
3行代码,实现IP到地理位置的反查功能 -
mentortao:
你好,可以给我发一份该文档么?fenginee#gmail.c ...
通用操作日志系统设计。一次编写,所有项目共同使用! -
youjianbo_han_87:
其实我的想法也是一样,用在内存缓存上做原子操作。至于数据库操作 ...
淘宝的秒杀我感觉并不复杂,用二次事务模式可以很容易的实现
这个问题,我把对象赋值为NULL,也是很好用的.在我的系统中,更新好用了,可是插入不好用了.没改前,是插入好用,而更新不好用.本来是系统中的问
题,可是,catch只是捕捉到,从但是,没有把log打印出来,找原因实在是难找.在高度数据库时,最好把异常捕捉中的信息打印出
来.org.springframework.orm.hibernate.HibernateSystemException: a
different object with the same identifier value was already associated
with the session: 4443398, of class:
com.onewaveinc.media.cms.entity.SyncImportFolder; nested exception is
net.sf.hibernate.NonUniqueObjectException: a different object with the
same identifier value was already associated with the session: 4443398,
of class: com.onewaveinc.media.cms.entity.SyncImportFolder
net.sf.hibernate.NonUniqueObjectException:
a different object with the same identifier value was already
associated with the session: 4443398, of class:
com.onewaveinc.media.cms.entity.SyncImportFolder
at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:852)
at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:790)
at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:749)
at org.springframework.orm.hibernate.HibernateTemplate$9.doInHibernate(HibernateTemplate.java:555)
at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:363)
at org.springframework.orm.hibernate.HibernateTemplate.save(HibernateTemplate.java:552)
at com.onewaveinc.media.cms.dao.impl.SyncFolderHibernateDao.insertHavaIndex(SyncFolderHibernateDao.java:31)
at com.onewaveinc.media.cms.manager.SyncFolderManager.doImportSyncFolder(SyncFolderManager.java:193)
at com.onewaveinc.media.cms.manager.SyncFolderManager.insertHavaIndex(SyncFolderManager.java:107)
at com.onewaveinc.media.cms.manager.SyncFolderManager.importSyncFolderList(SyncFolderManager.java:607)
at com.onewaveinc.media.cms.web.SyncFolderImportAction.post(SyncFolderImportAction.java:41)
at com.onewaveinc.media.common.web.HttpMethodAction.execute(HttpMethodAction.java:36)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at com.onewaveinc.media.web.struts.MediaRequestProcessor.processActionPerform(MediaRequestProcessor.java:51)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.onewaveinc.appcommon.security.web.utils.SecurityFilter.doFilter(SecurityFilter.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at com.onewaveinc.media.common.web.SpringHibernateSessionFilter.doFilterInternal(SpringHibernateSessionFilter.java:50)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.onewaveinc.media.web.struts.StrutsValidateFilter.doFilter(StrutsValidateFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.onewaveinc.appcommon.utils.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:168)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngin.ve.invoke(StandardEngin.ve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
a different object with the same identifier value was already associated with the session
一个经典的hibernate错误:a different object with the same identifier value was already associated with the session xxxx
hibernate3.0以上使用merge()来合并两个session中的同一对象
具体到我自己的代码就是
public Object getDomain(Object obj) {
getHibernateTemplate().refresh(obj);
return obj;
}
public void deleteDomain(Object obj) {
obj = getHibernateTemplate().merge(obj);
getHibernateTemplate().delete(obj);
}
解决a different object with the same identifier value was already associated with the session错误
这
个错误我一共遇到过两次,一直没有找到很好的解决方案,这个错误产生原因相信大家都知道,因为在hibernate中同一个session里面有了两个相
同标识但是是不同实体,当这时运行saveOrUpdate(object)操作的时候就会报这个错误。呵呵,也许你会说,你这么说跟没说没什么区别,我
承认,呵呵,我不知道具体为什么会产生这个错误,要不然也不会很久都没有解决,现在,给出一个临时的解决方案,给向我一样,没有办法找到根源的人一个能够
继续执行下去的方法(当然是对的,只是不是从产生原因入手)
其实要解决这个问题很简单,只需要进行session.clean()操作就
可以解决了,但是你在clean操作后面又进行了saveOrUpdate(object)操作,有可能会报出"Found two
representations of same collection",我找了很多资料,没有什么很好的解释,其中这篇文章帮助最大http://opensource.atlassian.com/projects/hibernate/browse/HHH-509
。
最
后通过session.refresh(object)方法就可以解决了,注意,当object不是数据库中已有数据的对象的时候,不能使用
session.refresh(object)因为refresh是从hibernate的session中去重新取object,如果session
中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下
当然这个问题最容易解决的办法还是使用Hibernate里面自带的merge()方法。不过我始终觉得碰到问题就用这种软件自带的非常用方法(和saveOrUpdate(),save(),update()相比)感觉十分不爽。
后来我还发现这种错误经常出现在一对多映射和多对多映射,请大家在使用一对多和多对多映射的时候要小心一些
Hibernate 疑难异常及处理
1、a different object with the same identifier value was already associated with the session。
错误原因:在hibernate中同一个session里面有了两个相同标识但是是不同实体。
解决方法一:session.clean()
PS:如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Found two representations of same collection"异常。
解决方法二:session.refresh(object)
PS:当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的
session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判
断一下。
解决方法三:session.merge(object)
PS:Hibernate里面自带的方法,推荐使用。
2、Found two representations of same collection
错误原因:见1。
解决方法:session.merge(object)
以上两中异常经常出现在一对多映射和多对多映射中
a different object with the same identifier value was already associated with the session
一个经典的hibernate错误:a different object with the same identifier value was already associated with the session xxxx
hibernate3.0以上使用merge()来合并两个session中的同一对象
具体到我自己的代码就是
public Object getDomain(Object obj) {
getHibernateTemplate().refresh(obj);
return obj;
}
public void deleteDomain(Object obj) {
obj = getHibernateTemplate().merge(obj);
getHibernateTemplate().delete(obj);
}
public Serializable save(Object persistentObject) throws DaoException {
try {
Session session = this.openSession();
beginTransaction();
persistentObject = session.merge(persistentObject);
Serializable id = session.save(persistentObject);
if (autoCommit)
commitTransaction();
return id;
} catch (HibernateException ex) {
log.error("Fail to save persistentObject", ex);
throw new DaoException("Fail to save persistentObject", ex);
} finally {
if (autoCloseSession)
closeSession();
}
}
评论
发表评论
-
对于12306,我的完整技术方案
2012-01-13 14:35 537312306主要就是卖票比较复杂,注册登录之类的功能就不说了。 ... -
halo-cloud私有云开源啦,构建小型的平民级的云计算平台
2011-05-04 08:14 4288可由1到100台机器组成,并用普通编程方式扩展的小型云计算平台 ... -
工作几年,回头看看,发现做的东西都没啥技术含量……
2011-03-08 12:43 3424从工作第一天开始,就开始用spring。有了spring和MV ... -
guzz 1.2.9 英文版发布新闻,求好心人转发
2011-02-14 09:36 2002guzz 1.2.9 released--split &a ... -
淘宝的秒杀我感觉并不复杂,用二次事务模式可以很容易的实现
2010-11-15 10:39 16267有个帖子说了,太长了 ... -
数据库分切设计何必纠结于hibernate shard模式,应该简单化了
2010-10-21 09:27 2280最近讨论db shard的帖子比较多,感觉很多都是在参考hib ... -
wget命令忽略fmt标签formatNumber的maxFractionDigits问题的解决
2010-06-07 11:47 3180使用linux wget命令下载页面时,wget没有传入地区, ... -
JPA规范设计的太弱智了!
2010-04-20 17:52 1873做guzz的annotation,看了一遍规范,又实现了一遍规 ... -
guzz1.2.7 rc1 发布,1个对象映射多张不同的表
2010-03-24 13:31 15461.2.7 完整新功能介绍: 支持表分切。允许同一对象按照 ... -
guzz1.2.7 beta3 发布,完成自动分表和自定义属性表
2010-03-18 09:09 1271可以让1个对象自动分切存储到不同的表中,并且允许每个表有自己特 ... -
分享2个java j2ee培训的ppt
2010-01-29 15:58 2514前些年内部培训写的ppt. 一个介绍j2ee基础,包括Ser ... -
对主要数据库Clob/Blob操作的总结
2010-01-27 10:38 2332Clob和blob的操作主要分为3种:插入,更新和读取显示。 ... -
InstallAnywhere 2008破解与自定义PlugIn陷阱经验分享
2008-10-22 10:34 4769IA 安装破解: 最近要给软件做个安装 ... -
想设计一种实用的有效的hibernate查询缓存设计,欢迎讨论
2007-12-16 15:56 2062hibernate 自带缓存的情况介绍 hibern ... -
对于应用高并发,DB千万级数量该如何设计系统哪?
2006-12-13 14:54 6524背景: 博客类型的应 ...
相关推荐
a different object with the same identifier value was already associated with the session 是一种常见的异常,通常是由于在 Hibernate 中同一个 session 里面有了两个相同标识但是是不同实体所致。解决方案有...
- FIX: The height of the TFlexRegularPolygon object incorrectly changes with its rotation. - FIX: Added division by zero protect in method TFlexControl.MovePathSegment. - FIX: The background beyond ...
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 ...
A clustered index is like a telephone directory in which all of the rows for customers with the same last name are clustered together in the same part of the book. Just as the organization of a ...
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 ...
RID A Row Identifier. Used to individually lock a single row within a table. Application A lock resource defined by an application. The lock manager knows nothing about the resource format. It simply...
5. `a different object with the same identifier value was already associated with the session` 这个异常表明在同一个Hibernate Session中存在两个具有相同标识但实际是不同对象的情况。处理方法有: - 使用`...
ASN.1 DER for SEQUENCE, INTEGER, BIT STRING, OCTET STRING, OBJECT IDENTIFIER, IA5 STRING, PRINTABLE STRING, UTCTIME, CHOICE and NULL types. Portable code builds out of the box with a conforming C ...
The "Identifier Case Sensitive" check box, which enables case-sensitive processing of database object identifier names, is added to MySQL Server Options The documentation generation for Enum members ...
**Different Object with Same Identifier Value** **异常描述:** 此异常表示同一个Session中存在具有相同标识符的不同对象实例。 **解决方法:** - 使用`session.clear()`清除Session缓存。 - 调用`session....