Исключение гибернации JPA EntityManager "отсоединенная сущность передана для сохранения" из-за ошибки тайм-аута

Я поддерживаю приложение, которое часто сохраняет огромное количество данных в базу данных во время постоянной операции. Приложение работает без проблем при меньшем количестве данных. Но когда я пытаюсь сохранить огромный объем данных, через 30 минут он выдает исключение гибернации "отсоединенная сущность, переданная для сохранения"

Я искал различные объяснения этому и обнаружил, что это может происходить в основном по двум причинам:

  1. Неправильно написанный код / ​​неправильно определенная сущность
  2. Объект отсоединяется после определенного времени ожидания

Я уверен, что это не проблема кода, так как приложение работало без проблем для меньшего количества данных.

Предполагая, что это проблема тайм-аута, я не уверен, где определен тайм-аут и какой именно тайм-аут определяет, когда объект должен быть отсоединен.

Любая помощь будет оценена. Мы используем Hibernate, Seam и JBoss 7 для запуска приложения

2 ответа

Решение

После долгих проб и ошибок я обнаружил, что это можно изменить, изменив default-timeout среды-координатора в standalone.xml, как показано ниже:

<subsystem xmlns="urn:jboss:domain:transactions:1.3"> <core-environment> <process-id> <uuid/> </process-id> </core-environment> <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> <coordinator-environment default-timeout="300"/> </subsystem>

Если вы используете контекст управляемой персистентности шва (так называемый SMPC), тогда менеджер сущностей (и, следовательно, сеанс гибернации), вероятно, будет храниться в контексте диалога, поэтому время ожидания, вероятно, является контекстом разговора, это можно откорректировать в файле component.xml с помощью следующие...

<core:manager conversation-id-parameter="cid" conversation-timeout="3600000" />

Установить в миллисекундах

Другие вопросы по тегам