0

私は 2 つのクラスを持っています。

 User {
        private String name;
        private Set<Role> roles;
    }

Role {
    private String name;
    private boolean disabled;
}

私のアプリケーションでは、ユーザーは複数のロールを割り当てることができます。これらはロールのセットに保存されます。ロールが無効になり、ユーザーが表示できなくなる場合があります。

Hibernate Criteria を使用してテーブルをクエリしています。

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("name", name));

ユーザーテーブルをクエリし、このクエリを使用して、クエリを実行した後にこれを処理する必要があるロールのセットから無効なロールを「非表示」にする方法はありますか?

4

3 に答える 3

1

HQL を使用して内部結合を実行できます。

HQL

SELECT u FROM User u JOIN u.roles r WHERE r.disabled = 0

booleanこれは、タイプの列にマップするように設定していることを前提としていますNumber(1)

デフォルトでOracleデータベースを使用する場合、Hibernateはブールデータ型を何にマップしますか?

休止状態の基準

List users = sess.createCriteria(User.class)
    .createCriteria("roles")
        .add( Restrictions.like("disabled", new Integer(0)))
    .list();
于 2013-02-05T10:38:47.197 に答える
1

最も簡単な方法として、@Whereアノテーションを使用できます。それは Hibernate 独自の注釈であり、私は独自の注釈が好きではありませんが、あなたの場合には合っています。

古いリンクで申し訳ありませんが、Hibernate の最新のマニュアルには、この注釈の適切な説明が見つかりませんが、まだ有効です。

于 2013-02-05T10:47:29.517 に答える
0
  1. ロールのアクセサメソッドをUserクラスに実装して、これをカプセル化する必要があります。このメソッドは、有効なロールのみを返します。これにより、無効な役割を非表示にする問題が修正されます。

  2. 他の問題は、すべてのユーザーのロールリストから無効にされたロールを削除することです。あなたは次のようにそれを行うことができます。ユーザー/役割に関連する操作を担当する特別なサービス/マネージャーを作成します。次のメソッドを実装disableRole()します。ロールを無効にしてから、すべてのユーザーを反復処理し、ロールリストからロールを削除します。ただし、注意してください。この場合、ロールが再度有効になると、ユーザーリストに自動的に表示されません。したがって、最初のアイデアのみを実装します(上記を参照)。

于 2013-02-05T10:41:30.020 に答える