NHibernate 和 Oracle 的按位与
我将 Fluent NHibernate 1.0RC(适用于 NHibernate 2.1.4000)与 Linq 2 NHibernate 一起使用,并且我想使用按位与运算来执行查询。我首先尝试像这样使用 Linq,但这不起作用:
var objects = _session.Linq<MyClass>()
.Where(x => (x.someInteger & otherInteger) > 0)
.ToList();
我的结论是 Linq 2 Nhibermate 不支持按位运算。所以我尝试使用 HQL:
var objects = _session.CreateQuery("select c from MyClass c
where c.someInteger & :param > 0")
.SetParameter("param", otherInteger)
.List<MyClass>();
这也不起作用。它给了我一个 ora-01036 错误:“非法变量名/数字”。
所以我的问题是:是否可以在 NHibernate 中使用按位运算? NHibernate 3.0 是否支持开箱即用?这是有问题的吗,因为我使用的是 Oracle DB,它需要 bitand() 函数而不是 & 函数。操作员?
I am using Fluent NHibernate 1.0RC (for NHibernate 2.1.4000) together with Linq 2 NHibernate, and I want to execute a query with a bitwise and operation. I first tried using Linq like this, but that did not work:
var objects = _session.Linq<MyClass>()
.Where(x => (x.someInteger & otherInteger) > 0)
.ToList();
My conclusion here was that bitwise operations was not supported by Linq 2 Nhibermate. So I tried using HQL instead:
var objects = _session.CreateQuery("select c from MyClass c
where c.someInteger & :param > 0")
.SetParameter("param", otherInteger)
.List<MyClass>();
This did not work either. It gave me an ora-01036 error: "illegal variable name/number".
So my questions are: Is it even possible to use bitwise operations with NHibernate? Is it supported out of the box with NHibernate 3.0? Is this problematic because I am using an Oracle DB, which will expect bitand() function instead of an & operator?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以扩展 Oracle 方言并将 BITAND 添加为可识别的 HQL 函数:
然后您应该能够像这样执行查询:
可能,Oracle 有类型转换问题,因为 BITAND > 返回很少使用的数据类型。如果是这种情况,请将 HQL 查询修改为:
You could extend the Oracle dialect and add BITAND as a recoginzed HQL function:
Then you should be able to execute your query like this:
Possibly, Oracle has a type conversion problem becuase BITAND returns a rarely used data type. If this is the case, modify your HQL query to: