|
|
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
Есть такой эксепшн Код: java 1. 2. Я так понимаю, что вакансия с id=6 дважды ассоциирована с объектом в бд и хибер не понимает какой из них правильный. Но я ума не приложу где это могло случиться. Как посоветуете искать баг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 13:28:33 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90, - транзакции как можно короче и равны http сессии. - время объекта не дольше самой сессии. Тогда подобная ошибка вылезет на этапе появления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 13:41:13 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
Обычно бывает при неправильной работе с коллекциями много-ко-многим. Возможно, станет понятнее из исходного кода, работающего с Vacancy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 13:59:01 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
до сих пор голову ломаю. Вот так замаплено: в Vacancy: Код: java 1. 2. 3. 4. в Event: Код: java 1. 2. 3. 4. метод, который вызывается: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. летим в update Код: java 1. 2. 3. 4. 5. 6. 7. 8. теперь идём в дао Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 18:57:31 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
Petro123- транзакции как можно короче и равны http сессии. у меня на один http запрос открывается несколько транзакций Petro123- время объекта не дольше самой сессии. про какую сессию тут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 19:02:00 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90у меня на один http запрос открывается несколько транзакций Зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 19:54:06 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
забыл ник, разговор утечет не в ту сторону...я думаю это не важно. я пофиксил эту ошибку :в Event убрал каскад: Код: java 1. 2. 3. 4. так стало: Код: java 1. 2. 3. 4. Но я всё равно не понимаю почему так произошло. Кто нибудь понял что случилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:11:19 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90разговор утечет не в ту сторону...я думаю это не важно. Согласен, это оффтоп, но уж больно мне интересно, ни разу такого не видел. Ну точнее видел когда одна транзакция на апдейт\делете\инсерт, а потом вторая транзакция рид-онли для отрисовки страницы в Seam, но чтоб самому юзать несколько транзакций - интересненько ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:26:45 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90Я так понимаю, что вакансия с id=6 дважды ассоциирована с объектом в бд При чем тут "в бд". Просто два экзеимпляра одного и того же класса с одним id. redwhite90и хибер не понимает какой из них правильный. Он не разбирается. Он просто запрещает комит такой сессии. redwhite90Но я ума не приложу где это могло случиться. Как посоветуете искать баг? Можно в хибере подебажить там же где выкидывается исключение, увидеть две сущности. Чтобы увидеть откуда они появились, нужно поставить брейкопоинт там где они регистрируются в сессии. Тоже просто найти, это не далеко от места где выкидывается исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:39:40 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
забыл никredwhite90у меня на один http запрос открывается несколько транзакций Зачем? может это и неправильно, но как есть: Возьмем метод обновления event-а: 1 транзакция - получить event, который меняем 2 - получить новые вакансии, которые надо приаттачить 3- новые кандидаты 4 - сохранить измененный event за каждый пункт отвечает метод из какого-либо сервисного класса. Каждый сервыисный класс помечен @Transactional Хотя наверное Вы просто меня как-то не так поняли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 21:49:00 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПри чем тут "в бд". Просто два экзеимпляра одного и того же класса с одним id. В сессии hibernate? Я что-то наверное не так понимаю. Я в 1 сессии беру меняемый event и закрываю сессию ,также поступаю с вакансиями и кандидатами для этого event-a, Теперь они у меня все detached, я их комбинирую как мне надо, жмакаю update для объекта event и вижу ексепшен. BlazkowiczОн не разбирается. Он просто запрещает комит такой сессии. Можете пожалуйста полностью сформулировать свою мысль? BlazkowiczМожно в хибере подебажить там же где выкидывается исключение, увидеть две сущности. Чтобы увидеть откуда они появились, нужно поставить брейкопоинт там где они регистрируются в сессии. Тоже просто найти, это не далеко от места где выкидывается исключение. По каким признакам можно идентифицировать место регистрации в сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 21:57:40 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90Теперь они у меня все detached что сложного? - либо не отсоединяй от хибера-БД-сессии - либо корректно и геморройно присоединяй обратно....поиск.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 23:06:11 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
Petro123redwhite90Теперь они у меня все detached что сложного? - либо не отсоединяй от хибера-БД-сессии - либо корректно и геморройно присоединяй обратно....поиск.... проблема в том, что я не понимаю в чем ошибка была. все 3 сущности(кандидат, вакансия, событие) связаны между собой отношением многие ко многим. Ну и видимо это как-то влияет на ситуацию. Я просто хочу докопаться до сути и понять 1.почему так произошло. В чем реальная причина. 2.Почему это пофиксилось убиранием каскада. Ну и собственно ответы на эти вопросы помогут мне не повторить этого в будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 23:16:55 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
автор- либо корректно и геморройно присоединяй обратно....поиск.... По какому принципу необходимо это делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 23:17:50 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
автор- либо не отсоединяй от хибера-БД-сессии то есть предлагаете сделать на уровне cервиса(который будет помечен @Transactional) метод, в котором будет инкапсулирована вся логика работы с БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 23:20:36 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90, - логика не с бд а с объектами Предметной области т.е. БЛ. - да. Все сделать за один вызов Http. - много ко многим по БЛ всегда каскад в одну сторону. Т.е. справочники не стираются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 09:48:36 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
Чтобы докопаться сделай минимальный тест ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 09:50:29 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90, в случае CascadeType.ALL перед обновлением коллекции необходимо происоединить к сессии ее хозяина. То есть в данном случае алгоритм такой: Код: java 1. 2. 3. 4. 5. скорее всего, необходимо присоединить и все объекты из коллекции, я по крайней мере, всегда так делаю. В данном же случае хозяин не был предварительно присоединен, я предполагаю, что при вызове session.update(event) получилось следующее: - состояние объекта event было синхронизировано с базой; это значит: было произведено обновление в таблице event и присоединение "предыдущей" коллекции vacancies (fetch = FetchType.EAGER). Итак, стостояние на первом этапе {event:attached; event.vacancies_old:attached; event.vacancies_new:detached} - поскольку для коллекции vacancies указано каскадное обновление (cascade = CascadeType.ALL), hibernate начал сохранять "новую" (пока что detached) коллекцию, но обнаружил в сессии attached элемениты "старой" коллекции. Отсюда и NonUniqueObjectException. Избежать этого исключения можно было бы только в случае, когда старая и новая коллекции не пересекаются, например, когда мы заполняем пустую коллекцию vacancies. Не знаю, насколько эти объяснения правдоподобны, но у меня это работает. Если кратко, алгоритм при работе с каскадными коллекциями много-ко-многим такой: - присоединить хозяина коллекции - присоедить элементы новой коллекции, заменить коллекцию в хозяине - сохранить хозяина Ну, или просто не использовать каскадное обновление в связях many-to-one и many-to-many, как это и рекомендуется в документации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 10:30:27 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
ivanra, авторИзбежать этого исключения можно было бы только в случае, когда старая и новая коллекции не пересекаются, например, когда мы заполняем пустую коллекцию vacancies Тоже такая первая мысль была, но это на самом деле не правдой оказалось. То есть у event не было приаттаченных вакансий и всё равно та же ошибка. авторНу, или просто не использовать каскадное обновление в связях many-to-one и many-to-many, как это и рекомендуется в документации Можете пояснить что меняется при добавлении каскадности? Без каскадности он не будет обновлять вакансии что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 11:35:25 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
ivanraredwhite90, в случае CascadeType.ALL перед обновлением коллекции необходимо происоединить к сессии ее хозяина. То есть в данном случае алгоритм такой: Код: java 1. 2. 3. 4. 5. скорее всего, необходимо присоединить и все объекты из коллекции, я по крайней мере, всегда так делаю. В данном же случае хозяин не был предварительно присоединен, я предполагаю, что при вызове session.update(event) получилось следующее: - состояние объекта event было синхронизировано с базой; это значит: было произведено обновление в таблице event и присоединение "предыдущей" коллекции vacancies (fetch = FetchType.EAGER). Итак, стостояние на первом этапе {event:attached; event.vacancies_old:attached; event.vacancies_new:detached} - поскольку для коллекции vacancies указано каскадное обновление (cascade = CascadeType.ALL), hibernate начал сохранять "новую" (пока что detached) коллекцию, но обнаружил в сессии attached элемениты "старой" коллекции. Отсюда и NonUniqueObjectException. Избежать этого исключения можно было бы только в случае, когда старая и новая коллекции не пересекаются, например, когда мы заполняем пустую коллекцию vacancies. Не знаю, насколько эти объяснения правдоподобны, но у меня это работает. Если кратко, алгоритм при работе с каскадными коллекциями много-ко-многим такой: - присоединить хозяина коллекции - присоедить элементы новой коллекции, заменить коллекцию в хозяине - сохранить хозяина Ну, или просто не использовать каскадное обновление в связях many-to-one и many-to-many, как это и рекомендуется в документации Ну и вообще...Кандидаты у меня ещё есть, которые абсолютно симметричны вакансиям(многие ко многим к event и к вакансиям) и там замаплено с каскадом. и: 1.Если убрать только связь Vacancy и Event - работает 2.Если убрать только связь Candidate и Event - НЕ работает - та же ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 11:45:50 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Можно в хибере подебажить там же где выкидывается исключение, увидеть две сущности. Чтобы увидеть откуда они появились, нужно поставить брейкопоинт там где они регистрируются в сессии. Тоже просто найти, это не далеко от места где выкидывается исключение. вот трэйс: автор10.09.2013 11:46:14 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [appServlet] in context with path [/ui] threw exception [Request processing failed; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.epam.hhsystem.model.vacancy.Vacancy#6]] with root cause org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.epam.hhsystem.model.vacancy.Vacancy#6] at org.hibernate.engine.internal.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:697) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:296) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:241) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:735) at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:727) at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:418) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:358) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:334) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:364) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:338) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:241) at org.hibernate.event.internal.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireUpdate(SessionImpl.java:786) at org.hibernate.internal.SessionImpl.update(SessionImpl.java:778) at org.hibernate.internal.SessionImpl.update(SessionImpl.java:774) at com.epam.hhsystem.jpa.EventDaoImpl.update(EventDaoImpl.java:45) 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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy38.update(Unknown Source) at com.epam.hhsystem.services.EventService.update(EventService.java:24) at com.epam.hhsystem.services.EventService$$FastClassByCGLIB$$3653e1b6.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) at com.epam.hhsystem.services.EventService$$EnhancerByCGLIB$$8266fd26.update(<generated>) at com.epam.hhsystem.web.controllers.EventMenuController.updateEvent(EventMenuController.java:164) 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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Где искать? где брекпоинты ставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:02:33 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90Ну и вообще...Кандидаты у меня ещё есть, которые абсолютно симметричны вакансиям(многие ко многим к event и к вакансиям) и там замаплено с каскадом. и: 1.Если убрать только связь Vacancy и Event - работает 2.Если убрать только связь Candidate и Event - НЕ работает - та же ошибка Тут еще важно, кто в связях объявлен хозяином, а кто - обратной (инверсной) стороной. В случае Vacancy и Event хозяин связи - Event, все действия с коллекцией зависят от него. Если в паре Candidate и Event хозяин Candidate, то действия с коллекцией со стороны Event просто игнорируются. Покажите аннотации на эту связь. А по каскадам - смотрите главу 11.11. Transitive persistence в документации (это по hibenate 3). Если кратко, они управляют транзитивностью операции, какой именно - видно из названия: CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH. CascadeType.UPDATE - нету, но поскольку выбрано CascadeType.ALL, то, как сказано в документации, транзитивными становятся все операции, в том числе и update(). Ну а что случилось дальше, я уже объяснил. Обычно, максимум что нужно для работы с many-to-many, это CascadeType.MERGE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:09:10 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
ivanraТут еще важно, кто в связях объявлен хозяином +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:11:27 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
ivanra, ivanra Если в паре Candidate и Event хозяин Candidate, то действия с коллекцией со стороны Event просто игнорируются. Покажите аннотации на эту связь. всё симметрично с вакансией в Event(хозяин видимо) Код: java 1. 2. 3. 4. Candidate: Код: java 1. 2. 3. 4. Ну и в паре Кандидат-Вакансия хозяин - Кандидат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 12:50:44 |
|
||
|
как пофикстить org.hibernate.NonUniqueObjectException ?
|
|||
|---|---|---|---|
|
#18+
redwhite90Ну и в паре Кандидат-Вакансия хозяин - Кандидат кстати если сменить хозяина, то работает и с каскадами. Правда перестали кандидаты сохраняться(их вакансии). Но я думаю, что хибер как-то не полностью подхватил моё изменение. Просто у меня стоит параметр для изменения базы как update ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 13:26:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38391488&tid=2128633]: |
0ms |
get settings: |
15ms |
get forum list: |
28ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
44ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
123ms |
get tp. blocked users: |
2ms |
| others: | 333ms |
| total: | 582ms |

| 0 / 0 |
