背景:ユーザーエンティティがあります。Userエンティティは次のようになります。
private String name;
private String address;
private List<Picture> pictureList; //The users pictures
private int rolesBitmask; //Is a bitmask for around 20 different roles
private int anotherBitmask; //Is similar bitmask as the roles
//
// Maybe 20 more fields..
これらすべてのフィールドでJPQLクエリを実行するAJAX検索Webページがあります(写真ではないかもしれませんが、ほとんどのフィールドで)。
たとえば、Webユーザーは、「An%」のような名前のユーザーを検索し、「Pica%」のようなアドレスに住んでいて、「printer」、「admin」、「guest」の役割を持ち、残りは気にしない場合があります。利用可能な役割の。「printer」、「admin」、および「guest」の役割は、事前定義された値に従ってビットマスクに解釈されます。
私の最初の質問:
この種のクエリを1つのJPQL/どのクエリでも実行するのは悪い考えですか?
2番目の質問: これらの「複雑な」クエリを続行する場合、パフォーマンスはどうなりますか(ユーザーがフォームを変更するたびに新しいデータベースアクセスになる可能性があるのはAJAX Webページであることに注意してください)。
3番目の質問: SQLでは、名前、住所、および役割を持つすべてのユーザーを取得するために、次のようなことを行います。
SELECT * FROM User WHERE (rolesBitmask & queryRoleBitmask) ^ queryRoleBitmask = 0 AND name LIKE 'An%' AND address LIKE 'Pica%';
私が知っているように、JPQLはビット演算をサポートしていないため、ネイティブクエリを使用するか、JPQLに相当するものに変換する必要がありますが、どのように実行するのかわかりません。あなたは?
ここで私を案内してもらえますか、多分私はこのAJAX検索Webページのアイデア全体をスラッシュカンに投げ込む必要がありますか、それともあなたはそれについてどう思いますか?多くの基準を扱う場合のベストプラクティスは何ですか?
前もって感謝します