この状況には問題があります (簡単にしようと思います) - 私の DB にはロールのリストとステータスのリストを持つユーザーがいます。
public class User implements Serializable {
@ManyToMany(cascade = CascadeType.ALL, fetch= FetchType.LAZY)
@JoinTable(name = "role_to_user",
joinColumns={@JoinColumn(name = "user_id")},
inverseJoinColumns={@JoinColumn(name = "role_id")})
private Set<Role> roles = new LinkedHashSet<Role>();
@ManyToMany(cascade = CascadeType.ALL, fetch= FetchType.LAZY)
@JoinTable(name = "status_to_user",
joinColumns={@JoinColumn(name = "user_id")},
inverseJoinColumns={@JoinColumn(name = "status_id")})
private Set<Status> statuses = new LinkedHashSet<Status>();
}
指定されたロールとステータスを持つ(ロールテーブルとステータステーブルに参加した後)ユーザーを返すことができなかった休止状態の基準を作成しようとしています。何かのようなもの :
ロール = 1 またはロール = 2 でステータス = 1 のユーザーを返す
何かをグーグルで検索したところ、指定されたロールを持つユーザーのみを返し、ステータスは返さないクエリを作成できるようになりました。
Criteria cr = session.createCriteria(User.class)
.createCriteria("roles")
.add(Restrictions.or(Restrictions.eq("roletype", 1), Restrictions.eq("roletype", 2)));
テーブル user と role は、2 つの列 (user_id、role_id) を持つ role_to_user テーブルを介して接続されます。同様に、テーブル user と status が status_to_role テーブルを介して接続されます。
アドバイスをありがとう :)