spring jpa创建双括号查询

时间:2016-04-28 17:04:49

标签: oracle jpa spring-boot eclipselink spring-data-jpa

我正在使用带有JPA(EclipseLink)和Oracle 11的Spring Boot。 我有CrudRepository界面:

public interface TransportDefRepository extends CrudRepository<TransportDef, Long> {
    public List<TransportDef> findByNameInOrderByNameAsc(List<String> names);
}

调用findByNameInOrderByNameAsc方法会创建查询:

SELECT ID, NAME,
FROM TRANSPORT_DEFS WHERE (NAME IN (('A','B'))) ORDER BY NAME ASC

和Oracle抛出异常:

ORA-00907: missing right parenthesis

我做错了吗? 为什么生成的查询中有双括号?

2 个答案:

答案 0 :(得分:1)

我的解决方案:

@Query("select t from TransportDef t where t.name in ?1 order by t.name asc")
public List<TransportDef> findByNameInOrderByNameAsc(List<String> names);

使用@Query注释eclipselink创建查询:

SELECT ... FROM TRANSPORT_DEFS WHERE (NAME IN (?,?,?)) ORDER BY NAME ASC

这只是解决方法 - 我不知道为什么Spring Data JPA会在没有这个注释的情况下生成无效查询...

答案 1 :(得分:-2)

我不太确定你是否需要传递一个列表来从你的表中查询,但如果我是你,我会以不同的方式编码。

1.我将传递参数,而不是将列表作为参数传递。做的 列出服务层上的名称迭代,并仍然从您的仓库返回列表。所以我的回购代码就像下面的

@Query("SELECT t FROM TRANSPORT_DEFS t WHERE t.name = :name)
List<TransportDef> findByNameInOrderByNameAsc(@Param("name") String name);

这样做只需要调整服务上的逻辑。