将findAll与MySQL一起使用时,JavaSpring数据JPA异常
我有一个实体和接口为JpaRepository<MyEntity, Long>
的DAO。使用日食
我使用DAO中的以下方法:
Iterable<MyEntity> findAll(Iterable<Long> ids);
这样:
List<Long> listOfIds = Arrays.asList(new Long[] {1,2,3});
Iterable<MyEntity> entities = dao.findAll(listOfIds);
我遇到了MySQL异常:
java.sql.SQLException: Operand should contain 1 column(s)
在数据库中执行的SQL查询具有以下语法:
SELECT id, creation_date, column1, column2 FROM my_entity WHERE (id IN ((1,2,3)))
问题出在最后一个大括号里——太多了。工作查询是:
SELECT id, creation_date, column1, column2 FROM my_entity WHERE (id IN (1,2,3))
为什么Spring数据会添加这些不必要的大括号?有办法解决吗
# 1 楼答案
找到了解决办法
首先,DAO还必须实现
JpaSpecificationExecutor<MyEntity>
。 然后,创建一个规范工厂类,如下所示:然后像这样使用你的刀:
生成的查询现在与预期一样