嗨大家好,
List<Integer> typeList = new ArrayList<Integer>();
typeList.add(1);
typeList.add(2);
Expression<Collection> expr = criteriaBuilder.literal(typeList);
Path<Integer> path = root.get("type");
path.in(expr);
生成的类型的SQL限制将是:
type=(1,2)
而不是
type in (1,2)
以下作品
path.in(typeList)
的工作原理。代码有什么问题?在我们的例子中,我们必须将集合转换为表达式。
编辑:
Predicate in(Expression<?>... values)
Predicate in(Expression<java.util.Collection<?>> values)
它似乎调用了第一种方法(错误)。怎么解决?似乎JPA定义了许多本身不明确的重载方法。
编辑:
如何从集合中创建表达式?文字(值)可能不是正确的方法。 JPA可能认为它是单个值,并用相同的比较器替换IN。