私は3つのテーブルを持っています- Recipient
、、Message
MessageType
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 列でビットごとの AND を実行することにより、特定の受信者が関心のあるメッセージのみを簡単に選択できます。
問題は、SQL でこれを行っていないことです。これを、NHibernate Criteria API で構築されたかなりリッチなシステムに追加オプションとして追加する必要があります。
NHibernate API を介してこの基準を表現する方法はありますか? API を使用するか、既存の基準に SQL/HQL 句を追加することによってですか?