我有三张桌子 - Recipient
, Message
,MessageType
消息类型如下所示:
| ID | Description |
|====|==============|
| 1 | JobAlert |
| 2 | Newsletter |
| 3 | SpecialOffer |
| 4 | Survey |
Recipient
包含用作位域的整数列;收件人可以选择他们想要接收的消息类型;如果收件人想要接收时事通讯和特别优惠,我们会将其位域设置为(2 ^ 2) | (2 ^ 3)
Message
包含对MessageTypeId
和计算列的引用,MessageTypeBitFlag
定义为POWER(2, MessageTypeId)
我用 SQL 表示的查询类似于:
SELECT * FROM Message, Recipient
WHERE Recipient.MessageTypeBitField & Message.MessageTypeBitFlag > 0
通过对 bitfield 和 bitflag 列进行按位与操作,很容易只选择特定收件人感兴趣的消息。
问题是,我不是在 SQL 中执行此操作 - 我需要将此作为附加选项添加到基于 NHibernate Criteria API 构建的相当丰富的系统中。
有没有办法通过 NHibernate API 来表达这个标准 - 使用 API 或通过向现有标准添加 SQL/HQL 子句?