Я отлаживал некоторое странное поведение в моем коде в течение нескольких дней и наткнулся на то, что меня удивило. Я подтвердил, что это не способствует моей проблеме, но я подумал, что в любом случае стоит проверить мои предположения.Несколько Hibernate envers экземпляры FirstLevelCache
Если я получаю текущий сеанс Hibernate в нескольких местах в одном потоке (я использую контекст сеанса потока), я всегда получаю один и тот же сеанс, и поэтому я попаду в один кеш одного уровня.
Я пришел к аналогичному поведению с энверсом при получении экземпляра аудиторского аудита. Я использую AuditReader reader = AuditReaderFactory.get(session);
, чтобы получить AuditReader
экземпляров. Я заметил, что каждый раз, когда это вызывается (даже в том же контексте сеанса), я получаю новый экземпляр аудита аудита, содержащий уникальный экземпляр кеша первого уровня.
Похоже, это приведет в лучшем случае к удару производительности нескольких, возможно перекрывающихся кешей.
Я предположил, что для контекста сеанса я всегда получал бы тот же экземпляр AuditReader
и, следовательно, один кеш первого уровня. Я не могу придумать, почему это не так.
Это оставляет меня с четырьмя возможностей:
- Я не использую правильный метод, чтобы получить читатель ревизовать контекст сеанса в
- Существует хорошая причина для нескольких экземпляров читателей аудита
- Существует ошибка где-то в глубине envers
- Не имеет смысла повторно использовать экземпляры аудиторских проверок.
Может кто-то прокомментировать это.
Спасибо.
Как связать сеанс с потоком и как вы его читаете ... Я знаю его простую задачу, но возникают большие проблемы ... другими словами, PLS делят код, который находится под вопросом. –
@AnanthaSharma У меня есть один статический экземпляр 'SessionFactory' и используйте' final Session session = sessionFactory.getCurrentSession() 'для получения текущего сеанса контекста Hibernate. – subie
как вы привязываете сессию к потоку и получаете доступ к ней .. там может быть что-то не так .. –