При использовании prototype
области видимости Session
с @Transactional
аннотацию в SDN 4.1.x, я видя следующее исключение:org.neo4j.ogm.exception.TransactionManagerException: «Сделка не является текущей для этой нити», когда сеанс используется в рамках прототипа
org.neo4j.ogm.exception.TransactionManagerException: "Transaction is not current for this thread"
Я недавно модернизировал свой Spring загрузки проекта в SDN 4.1.x и Neo4j OGM 2.0.3. Кажется, что когда инициировано несколько Session
s (из-за того, что область prototype
) DefaultTransactionManager
не может найти ссылку на ранее открытую транзакцию во время фиксации.
Я вижу, что статический ThreadLocal
удаляется каждый раз, когда сеанс создается.
Но тот же проект отлично работает с SDN 4.0.0 и версией OGM 1.1.4. Так что, как работа вокруг, мне пришлось сделать Session
thread
в области. Кто-нибудь может прояснить, какие изменения внесены в SDN/OGM, которые могут вызвать это. Или это ожидаемое поведение в SDN 4.1.X?
Вы обновляетесь с OGM 1.x до 2.x. В этом было много серьезных изменений. OGM 2.0.x разрешил использование сеансов «thread», однако моя рекомендация заключалась бы в том, чтобы не использовать это. Что вы пытаетесь достичь, что требует хранения всех объектов базы данных в памяти на протяжении всего срока службы приложения? Я бы настоятельно рекомендовал перейти на SDN 4.2/OGM 2.1, если вы обновляетесь, так как в этих выпусках значительно больше изменений, чем 4.1/2.0. – digx1
Я добавил дополнительную информацию в раздел «Ответ». Пожалуйста, дайте мне знать ваши взгляды на то же самое. – Sourav