我有一个包含USERS和GROUPS表的现有系统。我有用户和组的JPA对象。
表USERGROUPS是一个映射,用户在哪些组中,这个表没有映射到一个对象,我几乎就这样做了一个直接的SQL查询:
public List<User> getUsersByGroupId(long groupId) {
List<User> users = new ArrayList<User>();
String query = "select USERGROUPS.USER_ID from USERGROUPS where USERGROUPS.GROUP_ID = ?1";
Query q = getEntityManager().createNativeQuery(query, Long.class);
q.setParameter(1, groupId);
List<Long> userIds = new ArrayList<Long>();
usersIds.addAll(q.getResultList());
for (Long id : userIds) {
users.add(getUser(id));
}
return users;
}
一切正常。
现在我有一个新的应用程序想要使用USERS表中的Users子集。
计划是添加一个名为MYAPP_USERS的新表(因为我们不想修改现有的表),该表包含一列,即在MYAPP中列出的用户的USER_ID。
所以我的问题是,如何修改我的查询只返回MYAPP_USERS表中组的成员?
也就是说,我该怎么做:
String query = "select USERGROUPS.USER_ID from USERGROUPS where USERGROUPS.GROUP_ID = ?1 and WHERE ?1 IS IN MYAPP_USERS";
非常感谢任何帮助!
答案 0 :(得分:1)
您可以执行以下操作:
select USERGROUPS.USER_ID
from USERGROUPS
where USERGROUPS.GROUP_ID = ?1
AND EXISTS (SELECT * FROM MYAPP_USERS WHERE USER_ID = ?1)