我有一个名为group_table
MySQL 中只有两列user_group_id
and 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
and group_id
分别。
为什么它们没有在参数列表中被替换?
虽然我对在表中形成复合主键不感兴趣,但这对于我用于身份验证的 JAAS 来说(可能)是强制性的。
In this scenario, the query returns the same list as it is supplied from the database which is needless in reality. I actually need this query for deletion of multiple rows.