Spring Data @Query for collections - 查找属于给定类别集合中至少一个类别的产品

时间:2017-10-12 21:31:01

标签: spring spring-data jpql

我想使用Spring Data检索包含给定名称的所有产品,并且属于给定类别集合中的至少一个类别。

通过方法名称这样做很好(请不要注意字段名称中的葡萄牙语细微差别):

isDoubleByte => 51
containsNonLatinCodepoints => 288

我的测试URI是:

var regex = /[^\u0000-\u00ff]/; // Small performance gain from pre-compiling the regex
function containsDoubleByte(str) {
    if (!str.length) return false;
    if (str.charCodeAt(0) > 255) return true;
    return regex.test(str);
}

但是,我想构建等效的@Query,但它不起作用:

Page<Produto> findDistinctByNomeContainingAndCategoriasIn(String nome, Set<Categoria> categorias, Pageable pageRequest);

响应正文出错:

http://localhost:8080/produtos?nome=or&categorias=1,4 

stacktrace中的错误:

@Query("SELECT DISTINCT obj FROM Produto obj WHERE obj.nome LIKE %:nome% AND obj.categorias IN :categorias")
Page<Produto> findDistinctByNomeContainingAndCategoriasIn(@Param("nome") String nome, @Param("categorias") Set<Categoria> categorias, Pageable pageRequest);

我做错了什么?如何构建一个等同于我想要的查询的@Query?感谢。

1 个答案:

答案 0 :(得分:1)

你可以尝试

@Query("SELECT DISTINCT obj FROM Produto obj inner join obj.categorias cat WHERE obj.nome LIKE %:nome% AND cat IN :categorias")
Page<Produto> findDistinctByNomeContainingAndCategoriasIn(@Param("nome") String nome, @Param("categorias") Set<Categoria> categorias, Pageable pageRequest);

如果不起作用,请告诉我。