JPA是否支持WHERE子句中的多列IN成员资格查询?
JPA是否支持多列成员资格查询?
是的,JPA 2.1及更高版本支持WHERE子句中的多列成员资格查询,也就是你示例里的(expr1, expr2) IN ((1, 2), (3, 4))这种形式。
具体用法示例
在JPQL中可以直接使用该语法:
SELECT e FROM YourEntity e WHERE (e.column1, e.column2) IN ((1, 2), (3, 4))
如果需要动态传入参数,也可以绑定参数列表:
SELECT e FROM YourEntity e WHERE (e.column1, e.column2) IN :valuePairs
在Java代码中,你可以传入一个List<Object[]>类型的参数,每个数组元素对应一组列值:
List<Object[]> valuePairs = Arrays.asList(new Object[]{1, 2}, new Object[]{3, 4}); query.setParameter("valuePairs", valuePairs);
版本兼容说明
- 若使用JPA 2.0或更早版本,JPA规范本身不支持这种多列IN语法,需要用等价的OR组合替代:
SELECT e FROM YourEntity e WHERE (e.column1 = 1 AND e.column2 = 2) OR (e.column1 = 3 AND e.column2 = 4) - 部分JPA实现(如Hibernate)在JPA 2.1之前就提供了扩展支持,但写法可能和规范有差异,为了兼容性,优先遵循JPA标准语法。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

