У нас есть FlushEventListener для выполнения функций аудита. При обновлении некоторого объекта hibernate будет вызывать наш код аудита непосредственно перед очисткой. Код аудита должен запрашивать базу данных.
Если мы попытаемся сделать это в том же сеансе, очевидно, мы испортим состояние сеанса: мы получим исключение NullPointerException из спящего режима в какой-то момент, когда он проверяет naturalId внутри класса с именем NaturalIdXrefDelegate.
В настоящее время мы решили эту проблему, открыв новый сеанс для аудиторского запроса. Проблема в том, что мы теряем преимущество getCurrentSession (сессия для всего запроса, управляемая hibernate). Таким образом, мы вернемся к открытию одного сеанса для каждого запроса.
Есть ли элегантное решение для этого, или нам в основном нужно повторно реализовать getCurrentSession для управления нашим собственным сеансом № 2 в запросе?