我想使用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?感谢。
答案 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);
如果不起作用,请告诉我。