【发布时间】:2014-05-15 19:41:23
【问题描述】:
我一直在尝试创建一个 ISessionFactory,它有一个过滤器列表作为属性(因此可以在 XML 配置中指定),并在调用 OpenSession() 时启用每个过滤器.
不幸的是,我每时每刻都受到阻碍。我已将 LocalSessionFactoryObject 和 SimpleDelegatingSessionFactory 子类化,以我能想到的各种方式进行混合和匹配,但总会有一些语法或运行时错误使其无法正常工作。
谁能给我一个例子来说明如何做到这一点?
提前致谢。
[更新]
有人要求我提供一些代码来说明我的问题。我不认为这与我要问的问题真正相关,但我可以详细说明:
我认为要确保在打开新会话时启用过滤器,我必须拥有自己的 OpenSession 方法。似乎最好的方法是继承 DelegatingSessionFactory,添加 filter-list 属性和这样的方法
public new ISession OpenSession()
{
var rtn = base.OpenSession();
foreach (var filter in filters)
rtn.EnableFilter(filter);
return rtn;
}
当我让 Spring 将其构造为我的 ISessionFactory 对象时,我遇到了关于没有异常翻译器的运行时错误。所以,我想我最好也继承 LocalSessionFactoryObject 并让它使用过滤器列表创建我的新类型的 ISessionFactory,而不是默认类型。为此,我尝试覆盖 NewSessionFactory,但随后出现运行时错误,提示未定义 DbProvider,当我尝试从 LocalSessionFactoryObject 由于某些成员的范围,我遇到了一堆语法错误...
简而言之,一些看起来应该很简单的事情——事实上,我更希望很多人在我之前已经做过——变成了一次编码之旅。这就是为什么我正在寻找已经完成它的人,或者至少比我更了解框架的人。
【问题讨论】:
-
我不是 100% 确定您在这里提出的问题。您是说您在 XML 映射上定义了一些过滤器并希望启用它们,而不是在查询级别而是在会话级别?你在说什么
filters?你能提供更多细节吗? -
是的,我试图在会话打开时调用 session.EnableFilter()——这是由 OpenSessionInView 完成的——而不是让使用会话的每个方法都包含 EnableFilter() 调用。过滤器本身没什么特别的:“ACTIVE = 1”。就是这样。
标签: nhibernate spring.net