【发布时间】:2011-05-18 03:51:00
【问题描述】:
这是我的问题描述。
我有 2 个对象“A”和“B”。“A”与另一个对象“C”有 OneToOne(cascadeType= cascadeType.All) 关系。甚至“B”也有 OneToOne(cascadeType = cascadeType.All) 关系用“C”。
现在我需要持久化对象“A”。在持久化对象“A”之后,我需要持久化对象“B”。我可以成功持久化对象“A”,但是当我持久化对象“B”时“我得到了例外
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException
原因是当“A”被持久化时,对象“C”已经被持久化。而当“B”被持久化时,它也试图再次持久化“C”。这就是persistenceException的原因。
我尝试在持久化对象“B”之前合并对象 C。即使这样我得到了相同的异常。
请为我提供解决方法。
如果有人需要任何进一步的信息,请告诉我。
这是完整的堆栈跟踪
引起:javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:分离的实体传递给坚持:com.project.shared.entity.User 在 org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235) 在 org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168) 在 org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1174) 在 org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:674) 在 com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:258) 在 com.project.server.bean.ExpertFacade.create(ExpertFacade.java:64) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052) 在 org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124) 在 com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5243) 在 com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615) 在 com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 在 com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157) 在 com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139) 在 sun.reflect.GeneratedMethodAccessor64.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858) 在 com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797) 在 com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367) 在 com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5215) 在 com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203) 在 com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190) ... 69 更多谢谢
【问题讨论】:
-
能否提供完整的堆栈跟踪信息?
-
是的,我编辑了我的问题并粘贴了堆栈跟踪。
标签: hibernate jpa persistence