Проблема спящего режима (javax.persistence.PersistenceException: org.hibernate.PersistentObjectException) - PullRequest
1 голос
/ 01 декабря 2010

Вот мое описание проблемы.

У меня есть 2 объекта «A» и «B». «A» имеет отношение OneToOne (cascadeType = cascadeType.All) с другим объектом «C». Даже «B» имеет отношение OneToOne (cascadeType = cascadeType.All) с "C".

Теперь мне нужно сохранить объект «A». И после того, как я сохраню объект «A», мне нужно сохранить объект «B». Я могу успешно сохранить объект «A», но когда я сохраню «B» «Я получаю исключение

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException

Причиной этого является то, что объект "C" сохраняется, когда сохраняется "A". И когда "B" сохраняется, он также пытается снова сохранить "C". Вот почему исключение persistenceException.

Я пытался объединить объект C, прежде чем сохранить объект "B". Даже тогда я получаю то же исключение.

Пожалуйста, предоставьте мне работу.

Также дайте мне знать, если кому-то нужна дополнительная информация.

Вот полная трассировка стека

   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 ]

4 голосов
/ 01 декабря 2010

Отдельный объект - это объект, который имеет идентификатор, но не присутствует в текущем сеансе. При попытке сохранить его, спящий режим жалуется. Вы должны положить его обратно в сессию. Это делается через entityManager.merge(..).

2 голосов
/ 21 марта 2011

Я получил то же исключение ниже:

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.....

      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...