hibernate问题,帮忙看看啊

culven 2010-10-29 12:47:04
出错信息如下:请高手看看:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.huawei.mdsweb.entity.Newlinkman#3]
at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:556)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:259)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:217)
at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:564)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:552)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:544)
at com.huawei.mdsweb.dao.NewlinkmanDAO.update(NewlinkmanDAO.java:56)
at com.huawei.mdsweb.action.NewlinkmanAction.modify(NewlinkmanAction.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
...全文
176 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangqilin0426 2010-11-01
  • 打赏
  • 举报
回复
呵呵,路过,我菜鸟一个啊
yhy19910223 2010-10-29
  • 打赏
  • 举报
回复
很明显啊:a different object with the same identifier value was already associated with the session: [com.huawei.mdsweb.entity.Newlinkman#3]
有相同标识符的不同对象对象存在啊,你想查询唯一结果?必须要有且只有一个查询结果才能用uniqueresult()查询的。
xyz0601 2010-10-29
  • 打赏
  • 举报
回复
楼主提的问题我也遇到过,当时是重新set了下给解决的
yonghenghxq 2010-10-29
  • 打赏
  • 举报
回复
在hibernate事务处理中,对同一id的对象在同一事务中只应有一个对象,无论该对象是单独存在,还是作为many-to-one or one-to-many元素存在。通过不同的方式或者不同的时间(session)从数据库取得数据时,应需考虑对象同一性问题。
forever_ai 2010-10-29
  • 打赏
  • 举报
回复
id问题
多直接的异常信息
dafen496050286 2010-10-29
  • 打赏
  • 举报
回复
给分呀
culven 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dafen496050286 的回复:]
id肯定不会改了,你先根据id获得实体,把需要改的属性重新set一下,根据实体修改
[/Quote]

这位仁兄真是一言惊醒梦中人啊!

另:本人只是外派到深圳华为的.....
jayqean 2010-10-29
  • 打赏
  • 举报
回复
LZ你在南京华为?为什么上海华为研究所就没有搞WEB的呢?
sujianchinaouya 2010-10-29
  • 打赏
  • 举报
回复
com.huawei 在华为干?
dafen496050286 2010-10-29
  • 打赏
  • 举报
回复
id肯定不会改了,你先根据id获得实体,把需要改的属性重新set一下,根据实体修改
culven 2010-10-29
  • 打赏
  • 举报
回复
我先是查询出了结果,然后想对这个结果进行修改,是对同一个id的数据库记录进行更新,但是实体是两个实例,于是报错,应该如何解决呢?
悟之思语 2010-10-29
  • 打赏
  • 举报
回复
at com.huawei.mdsweb.dao.NewlinkmanDAO.update(NewlinkmanDAO.java:56)
at com.huawei.mdsweb.action.NewlinkmanAction.modify(NewlinkmanAction.java:67)

给你个例子:

错误原因:传进来的A是一个独立实体,加载B后,b对象会加载一个a在这个session中,如此在update(a)时,session重新加载并update,如此重复了,

解决办法:

public void update_A_B(A a) {

B b=findByA(a);

update(b);

a=b.getMany_to_one_A();

update(a);

}




哈哈 Good Luck!
悟之思语 2010-10-29
  • 打赏
  • 举报
回复
看看是不是hibernate中多了一个com.huawei.mdsweb.entity.Newlinkman类的映射文件
f0501412727 2010-10-29
  • 打赏
  • 举报
回复
问题就是a different object with the same identifier value was already associated with the session,是不是你的2个对象具有了同一个id呢?
blazingfire 2010-10-29
  • 打赏
  • 举报
回复
清空一下session
session.clear();

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧