我有一个group_table
在 MySQL 中命名的表,只有两列user_group_id
和group_id
(它们都是类型VARCHAR
)。这两列共同构成一个复合主键。
我需要使用子选择执行一条语句,IN()
以根据传递给查询的值列表选择行。
@Override
@SuppressWarnings("unchecked")
public List<GroupTable> getList(List<GroupTable> list)
{
CriteriaBuilder criteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery<GroupTable> criteriaQuery=criteriaBuilder.createQuery(GroupTable.class);
Root<GroupTable> root = criteriaQuery.from(entityManager.getMetamodel().entity(GroupTable.class));
criteriaQuery.where(root.in(list));
return entityManager.createQuery(criteriaQuery).getResultList();
}
该实现产生以下查询。
SELECT group_id,
user_group_id
FROM projectdb.group_table
WHERE ((?, ?) IN ((?, ?), (?, ?)))
/*Binding parameters.*/
bind => [null, null, ROLE_AAA, aaa, ROLE_BBB, aaa]
请注意,关于组合键本身的前两个参数是null
. 他们应该是user_group_id
和group_id
分别。
为什么它们没有在参数列表中替换?
虽然我对在表中形成复合主键不感兴趣,但这(可能)对于我用于身份验证的 JAAS 来说是强制性的。
在这种情况下,查询返回与数据库提供的相同列表,这实际上是不必要的。我实际上需要这个查询来删除多行。