如何查询 NHibernate 中存储为枚举的标志
如何进行涉及用作标志的枚举的 HQL 或条件搜索(首选后者)。换句话说,我有一个持久的枚举属性,用于存储某种标志。我想查询设置了这些标志之一的所有记录。当然,使用 Eq 是行不通的,因为只有当这是唯一的标志集时,这才是正确的。
使用 Criteria API 解决这个问题是最好的,但如果这只能使用 HQL 实现,那也很好。
How to do either a HQL or a Criteria search (the latter is preferred) involving an enum that is used as flags. In other words, I have a persisted enum property that stores some kind of flags. I want to query all the records that have one of these flags set. Using Eq won't work of course because that will only be true, if that is the only flag set.
Solving this using the Criteria API would be the best, but if this is only doable using HQL that is good too.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您要查询 2 个值,则需要查找
Expression.Or
;如果您要查询 2 个以上的值,则需要查找Expression.Disjunction
:You are looking for
Expression.Or
if you are querying 2 values orExpression.Disjunction
if you are querying for more than 2 values:以下是我使用 Criteria 解决问题的方法:
Here is how I solved using Criteria:
HQL 很简单:
HQL is easy:
以下是如何使用标准 API 来实现此操作:
using:
应该生成以下输出 where 子句:
应该为您提供设置了标志 Bar.A 和 Bar.C 的行(不包括其他所有内容)。您也应该能够将它与合取和析取一起使用。
Here's how you could do it with the criteria API:
using:
should generate the following output where clause:
which should give you rows that have flags Bar.A and Bar.C set (excluding everything else). You should be able to use it with conjunction and disjunction too.