我们有一个 FlushEventListener 来执行审计功能。在更新某些实体时,hibernate 会在刷新之前回调我们的审计代码。审计代码需要查询数据库。
如果我们尝试在同一个会话中执行此操作,显然我们会弄乱会话的状态:我们从 hibernate 内部得到一个 NullPointerException,在某个时刻,当它在名为 NaturalIdXrefDelegate 的类中验证 naturalIds 时。
我们目前通过为审计查询打开一个新会话来解决它。这样做的问题是我们失去了 getCurrentSession 的好处(整个请求的会话,由休眠管理)。这样,我们将回到每个查询打开一个会话。
是否有一个优雅的解决方案,或者我们基本上需要重新实现 getCurrentSession 来管理我们自己的请求中的会话#2?