1

我有一个带有 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 表中的用户子集。

计划是添加一个名为 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";

?

任何帮助是极大的赞赏!

4

2 回答 2

0

您可以执行以下操作:

select USERGROUPS.USER_ID 
from   USERGROUPS 
where  USERGROUPS.GROUP_ID = ?1 
   AND EXISTS (SELECT * FROM MYAPP_USERS WHERE USER_ID = ?1)
于 2012-11-08T21:03:06.460 回答
0

要仅获取在 MYAPP_USERS 表中找到的用户用户的结果,请从该表开始并使用 USERGROUPS 执行 INNER JOIN 以获取他们的 GROUP_ID:

SELECT usergroups.user_ID
FROM myapp_users INNER JOIN usergroups
ON myapp_users.user_ID = usergroups.user_ID
WHERE usergroups.group_ID = ?1

为了计划未来,我将创建一个包含 user_ID 和 app_ID 列的表 app_users,而不是 myapp 表,然后在查询中指定 app_ID:

...
WHERE usergroups.group_ID = ?1
AND app_ID = ?2
于 2012-11-08T22:21:58.450 回答