返品の種類がgetUsersById
の方法で必要な小修正がありますが、List<Long>
の代わりにList<User>
であるはずですが、あなたがやったことは全く問題ありません。
UserPKオブジェクトのリストを使用してクエリを実行し、それをIN演算子のパラメータとして使用できます。だから、(あなたがやったように)以下のクエリは正常に動作します:
public List<User> getUsersByIdCombo(List<UserPK> ids) {
TypedQuery<User> q = entityManager.createQuery("SELECT u FROM User AS u WHERE u.userPK IN :ids", User.class);
q.setParameter("ids", ids);
return q.getResultList();
}
をまた、明示的に埋め込まれたIDクラス(userPK.id
またはuserPK.group
)を横断することにより照会することができます。下記のサンプルがあります。
public List<User> getUsersById(List<Long> ids) {
TypedQuery<User> q = entityManager.createQuery("SELECT u FROM User AS u WHERE u.userPK.id IN :ids", User.class);
q.setParameter("ids", ids);
return q.getResultList();
}
public List<User> getUsersByGroup(List<String> groups) {
TypedQuery<User> q = entityManager.createQuery("SELECT u FROM User AS u WHERE u.userPK.group IN :groups", User.class);
q.setParameter("groups", groups);
return q.getResultList();
}
public User getSingleUserByIdAndGroup(Long id, String group) {
TypedQuery<User> q = entityManager.createQuery("SELECT u FROM User AS u WHERE u.userPK.id = :id AND u.userPK.group = :group", User.class);
q.setParameter("id", id);
q.setParameter("group", group);
return q.getSingleResult();
}
各メソッドをテストすることで、これらのクエリがどのように動作するかを見てみましょう。このデータがUSER
テーブルにあるとします。
例1:
ID: 4 | GROUP: eng
ID: 1 | GROUP: it
例2:クエリユーザーUserPKのリストによっては
List<UserPK> userPKs = new ArrayList<UserPK>();
userPKs.add(new UserPK(1L, "it"));
userPKs.add(new UserPK(4L, "eng"));
List<User> userListQuery1 = userDAO.getUsersByIdCombo(userPKs);
for (User user: userListQuery1) {
System.out.println(user);
}
結果オブジェクトIDのリストでクエリのユーザーを
List<Long> ids = new ArrayList<Long>();
ids.add(2L);
ids.add(5L);
List<User> userListQuery2 = userDAO.getUsersById(ids);
for (User user: userListQuery2) {
System.out.println(user);
}
結果:
ID: 5 | GROUP: eng
ID: 2 | GROUP: it
例3:グループのリストによってクエリユーザー
List<String> groups = new ArrayList<String>();
groups.add("it");
groups.add("eng");
List<User> userListQuery3 = userDAO.getUsersByGroup(groups);
for (User user: userListQuery3) {
System.out.println(user);
}
結果:
ID: 4 | GROUP: eng
ID: 5 | GROUP: eng
ID: 1 | GROUP: it
ID: 2 | GROUP: it
例4:IDによるクエリシングルユーザグループ別に
User user = userDAO.getSingleUserByIdAndGroup(3L, "hr");
System.out.println(user);
結果:
ID: 3 | GROUP: hr
可能重複https://stackoverflow.com/questions/3126366/doing-an-in-query-with-hibernateしかし、あなたは聞いていない限り知っているが、再びハード質問 –
私はINフィールドを使用しているが、埋め込みオブジェクトは認識していません。この場合、プライマリキーはコンポジットキーなので、このクエリを作成することはできません。 – Rawr