Операция удаления в afterTrasnactionCommit вызывает исключение - PullRequest
0 голосов
/ 22 марта 2019

Я работаю в контексте afterTransactionCommit.У меня есть метод, который помечен как @Transactional (распространение = ТРЕБУЕТСЯ).Метод использует JPA EntityManager для выполнения операции удаления, которая делегирует Hibernate 5, работающий в контейнере Spring 4.3.В afterTransactionCommit выполняется более 10 операций.Каждое удаление завершается успешно, за исключением 10-го, которое постоянно терпит неудачу.Эта операция была успешно завершена с использованием Hibernate 3.6.x, но, поскольку я обновился до Hibernate 5.4.x, операция больше не завершается успешно.

После включения ведения журнала DEBUG я вижу, что транзакция все еще активна и чтоTransactionManager обнаружил EntityManager для транзакции JPA.Было установлено, что транзакция активна, и операция будет участвовать в существующей транзакции.Но когда встречается 10-я операция удаления, TransactionManger показывает, что это был сбой, участвующий в существующей транзакции, и транзакция помечается для отката.

Я не могу определить причину сбоя.

Кто-нибудь сталкивался с чем-то подобным ранее?

Файл журнала ниже.

2019-03-22 09: 00: 32,692 [main sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 32,692 [main sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 32,725 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Обнаружен связанный с потоком EntityManager [SessionImpl (1808876088)] для JPA-транзакции 2019-03-22 09: 00: 32,725 [основной идентификатор сеанса: идентификатор vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 32,735 [основной идентификатор сессии: идентификатор vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Найден связанный с потоками EntityManager [SessionImpl (18088)76088)] для транзакции JPA 2019-03-22 09: 00: 32,736 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 32,736 [mainsessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для JPA-транзакции 2019-03-22 09: 00: 32,736 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 32,738 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 32,738 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 32,738 [основной сеанс:vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 32,738 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 33,266 [main sessionId: vaultId: userId: origReqUri:] DEBUG org.hibernate.SQL - / * УДАЛИТЬ ИЗ DObjReference КАК О ГДЕ o.instanceId =: instanceId И o.referencingObjectType =: ссылка на ИД объекта объекта.referencingObjectKey =: referencingObjectKey AND o.referencingParentKey =: referencingParentKey / удалить из d_obj_reference, где instance_id =?и referencing_object_type =?и referencing_object_key =?и referencing_parent_key =?2019-03-22 09: 00: 33,278 [основной идентификатор сеанса: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09:00: 33,278 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 33,283 [основной идентификатор сессии: идентификатор vaultId: userId: origReqUri:] DEBUG org.hibernate.SQL - / SELECT attributeKey ОТ атрибута КАК o ГДЕ o.instanceId =: instanceId / выберите attrib0_.attribute_key в качестве col_0_0_ из атрибута attrib0_, где attrib0_.instance_id =?2019-03-22 09: 00: 33,295 [основной идентификатор сеанса: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09:00: 33,295 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 33,323 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Обнаружен связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 33,323 [main sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 33,332 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 33,332[основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 33,332 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Обнаружен связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA2019-03-22 09: 00: 33,332 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 33,334 [основной идентификатор сессии: vaultId: userId:origReqUri:] DEBUG common.infrastructure.TransactionManager - Найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 33,334 [основной идентификатор_сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 33,334 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для JPA-транзакции 2019-03-22 09:00: 33,334 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 34,133 [основной идентификатор сессии: идентификатор vaultId: userId: origReqUri:] DEBUG org.hibernate.SQL - / УДАЛИТЬ ИЗ DObjReference КАК o ГДЕ o.instanceId =: instanceId И o.referencingObjectType =: referencingObjectType И o.referencingObjectKey =: referencingObjectKey AND o.referencingParentKey =: referencingParentKey / удалить из d_obj_reference, где instance_id =?и referencing_object_type =?и referencing_object_key =?и referencing_parent_key =?2019-03-22 09: 00: 34,145 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09:00: 34,145 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - Участие в существующей транзакции 2019-03-22 09: 00: 34,150 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG org.hibernate.SQL - / SELECT attributeKey ОТ атрибута КАК o ГДЕ o.instanceId =: instanceId * / выберите attrib0_.attribute_key в качестве col_0_0_ из атрибута attrib0_, где attrib0_.instance_id =?2019-03-22 09: 00: 34,226 [основной идентификатор сеанса: идентификатор vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - инициирование принятия транзакции 2019-03-22 09: 00: 34,226 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - фиксация транзакции JPA в EntityManager [SessionImpl (1808876088)] 2019-03-22 09: 00: 34,294 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 34,294 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 00: 34,294 [основной sessionId: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - найден связанный с потоком EntityManager [SessionImpl (1808876088)] для транзакции JPA 2019-03-22 09: 00: 34,294 [основной идентификатор сессии: vaultId: идентификатор пользователя: origReqUri:] DEBUG common.infrastructure.TransactionManager - участие в существующей транзакции 2019-03-22 09: 05: 46,949 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - сбой участвующей транзакции - пометка существующей транзакции только для отката 2019-03-22 09: 05: 46,950 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - установка транзакции JPA для EntityManager [SessionImpl (1808876088)] только для отката 2019-03-22 09: 05: 46,952 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - сбой участвующей транзакции - пометка существующей транзакции только для отката 2019-03-22 09: 05: 46,953 [основной идентификатор сессии: vaultId: userId: origReqUri:] DEBUG common.infrastructure.TransactionManager - установка транзакции JPA для EntityManager [SessionImpl (1808876088)] только для отката 2019-03-22 09: 05: 53,089 [main sessionId: vaultId: userId: origReqUri:] ОШИБКА domain.impl.ObjectRepositoryImpl - [INFO - General] - Исключительная ситуация при выполнении наблюдателя. Так как это посткоммит, он будет пропущен! org.springframework.dao.InvalidDataAccessApiUsageException: выполнение запроса на обновление / удаление; Вложенное исключение - javax.persistence.TransactionRequiredException: выполнение запроса на обновление / удаление. в org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible (EntityManagerFactoryUtils.java:413) в org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc $ afterThrowing $ org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect $ 1 $ 18a1ac9 (JpaExceptionTranslatorAspect.aj: 101 * 37)

...