一尘不染

创建所有Hibernate会话时如何拦截它们(Spring / Grails环境)

hibernate

创建新Hibernate会话时,是否有办法拦截它们?我需要访问每个Session实例以启用带有参数的Hibernate过滤器。

我唯一可行的解​​决方案是包装SessionFactory,但这涉及到许多半讨厌的骇客,并且它要求我实现大约60种方法,其中只有少数几种很有趣。

由于某些令人讨厌的原因,Hibernate的SessionFactory实现被声明为final,因此扩展它不是一种选择。我也尝试过方面和Java代理,但没有任何运气。


阅读 213

收藏
2020-06-20

共1个答案

一尘不染

我已经解决了这个问题(至少在Hibernate为此提供了适当的API之前)。解决方案的简短版本:

  1. 代理会话工厂
  2. 拦截对getCurrentSession的方法调用,并使用我们已经初始化的CurrentSessionContext实现(不是Hibernate)。

较长版本:http :
//www.developer-b.com/blog/entry/1635/2010/oct/07/intercepting-hibernate-
sessions

来源/ Github:http :
//github.com/multi-tenant/grails-hibernate-hijacker(仍处于实验阶段)

感谢您的输入!

2020-06-20