4

私は次の休止状態のエンティティを持っています

public class Container {
  ...

  @OneToMany
  private List<ACLEntry> aclEntries;
}

コンテナ インスタンスを保護するために、次のエンティティを使用します。

public class ACLEntry {

  ...
  private Long sid;
  private boolean principal;
  private Integer mask;

}

hql-queries は自動的に作成されるため、コンテナー インスタンスを検索するために、次のクエリが作成されます。

select container from Container container 
inner join container.aclEntries as aclEntry 
with bitwise_and (aclEntry.mask, 1) = 1 and 
   (aclEntry.sid = :userId or aclEntry.sid = :roleId)  

これに関する問題は、aclentry 結合が 2 つの結果を返す可能性があり、結果としてコンテナーの結果が重複することです。

これを解決する方法を知っている人はいますか?

4

3 に答える 3

1

私が問題を理解している限り、 Container オブジェクトの複数のエントリを保持できるコンテナが必要なのは、 hql クエリを次のものに置き換えるだけです:

select distinctネイティブクエリとして追加。

于 2012-05-11T14:11:15.190 に答える
0

ブルート フォース ソリューションとして、ネイティブ クエリを作成できます。

于 2012-05-11T14:11:46.287 に答える
0

これは、関連付けの条件に基づいてオブジェクトを選択することを簡単にサポートする Criteria クエリとして記述する方が理にかなっています。

同じことが HQL またはネイティブ クエリで実行できます。同じロジックを指定する Criteria クエリを実行し、それが生成する HQL/SQL を確認することは有益な場合があります。

于 2012-05-11T14:40:37.323 に答える