首页 文章

Hibernate问题(javax.persistence.PersistenceException:org.hibernate.PersistentObjectException)

提问于
浏览
1

这是我的问题描述 .

我有2个对象“A”和“B” . “A”与另一个对象“C”具有OneToOne(cascadeType = cascadeType.All)关系.Even“B”与“C”具有OneToOne(cascadeType = cascadeType.All)关系” .

现在我需要保持对象“A” . 并且在我持久化对象“A”之后,我需要保持对象“B” . 我可以成功地持久化对象“A”,但是当我坚持“B”时,我得到例外

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException

原因是对象“C”在持久化“A”时持久存在 . 当“B”被持久化时,它也会尝试再次持久化“C” . 这就是persistenceException的原因 .

我试图在持久化对象“B”之前合并对象C.即使我得到相同的异常 .

请给我一个解决方法 .

如果有人需要任何进一步的信息,请告诉我 .

这是完整堆栈跟踪

Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.project.shared.entity.User
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1174)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:674)
        at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:258)
        at com.project.server.bean.ExpertFacade.create(ExpertFacade.java:64)
        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.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
        at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
        at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5243)
        at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:615)
        at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
        at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:567)
        at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:157)
        at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:139)
        at sun.reflect.GeneratedMethodAccessor64.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:858)
        at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:797)
        at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:367)
        at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5215)
        at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5203)
        at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190)
        ... 69 more

谢谢

2 回答

  • 2

    我在下面得到了同样的例外:

    Exception in thread "SimpleAsyncTaskExecutor-2" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.tea.domain.User
    

    当我如下修改用户对象时,我没有得到异常:

    @Override
        public void samplePull(Application application, User user) {
    
            user = userDao.findUser(user.getId());
            more code below.....
    
          }
    
  • 4

    分离实体是具有标识符但在当前会话中不存在的实体 . 当你试图保存它时,休眠抱怨 . 你必须把它放回会话中 . 这是通过 entityManager.merge(..) 完成的 .

相关问题