当前位置: 首页 > 面试题库 >

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

谢夜洛
2023-03-14
问题内容

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

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

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


问题答案:

我已经解决了这个问题(至少在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(仍处于实验阶段)

感谢您的输入!



 类似资料:
  • 问题内容: 如何在Hibernate拦截器中获取Hibernate会话? 我正在尝试使用Hibernate通过组织ID透明地强制执行数据访问。我设置了一个全局筛选器,以按组织ID筛选所有查询。现在,在保存/更新之前,我需要使用实体拦截器在所有实体上设置组织ID。 组织ID来自HttpSession 我已经在Hibernate会话中将Organizational Id设置为Filter属性,我想在我

  • 我正在将Hibernate拦截器与(Hibernate 4.x)一起使用。我想对会话的save方法执行一些操作。所以我扩展了EmptyInterceptor。 它有以下几种方法: 问题:在postFlush()我想执行保存操作。所以我的控制卡在循环中。因为每当session.save()被调用我的调用时,空拦截器的onSave()和postFlush()方法被调用来拦截SAVE操作。 为了消除这个

  • 我找了很多解决办法。谢了。

  • 拦截对话框 bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndir

  • 我重新启动服务器和浏览器,因此没有会话数据 我去www.someurl。com公共访问页。我的控制器用这个HttpSession session=request给我一个会话。getSession(true) <李> 我点击一个指向www.someurl的平面锚链接。在新选项卡中打开的com/admin受限访问页面。Spring Security 3拦截了这一点,并对凭据提出了挑战。我成功登录 我返