2017-10-12 29 views
1

我想檢索包含給定名稱並且屬於給定類別集合中至少一個類別的所有產品, Spring數據。Spring Data @查詢集合 - 查找屬於給定類別集合中至少一個類別的產品

的方法名做這工作正常(請不要介意在字段名葡萄牙人精妙之處):

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

我的測試URI是:

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

不過,我想建立等效的@Query,但它不工作:

@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); 

錯誤在響應正文:

{ 
    "timestamp": 1507843414826, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "org.springframework.dao.InvalidDataAccessResourceUsageException", 
    "message": "could not prepare statement; SQL [select distinct produto0_.id as id1_10_, produto0_.nome as nome2_10_, produto0_.preco as preco3_10_ from produto produto0_ cross join produto_categoria categorias1_, categoria categoria2_ where produto0_.id=categorias1_.produto_id and categorias1_.categoria_id=categoria2_.id and (produto0_.nome like ?) and (. in (? , ?)) order by produto0_.nome asc limit ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement", 
    "path": "/produtos" 
} 

錯誤堆棧跟蹤:

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT DISTINCT PRODUTO0_.ID AS ID1_10_, PRODUTO0_.NOME AS NOME2_10_, PRODUTO0_.PRECO AS PRECO3_10_ FROM PRODUTO PRODUTO0_ CROSS JOIN PRODUTO_CATEGORIA CATEGORIAS1_, CATEGORIA CATEGORIA2_ WHERE PRODUTO0_.ID=CATEGORIAS1_.PRODUTO_ID AND CATEGORIAS1_.CATEGORIA_ID=CATEGORIA2_.ID AND (PRODUTO0_.NOME LIKE ?) AND (.[*] IN (? , ?)) ORDER BY PRODUTO0_.NOME ASC LIMIT ? "; expected "), NOT, EXISTS, INTERSECTS, SELECT, FROM, WITH"; SQL statement: 
select distinct produto0_.id as id1_10_, produto0_.nome as nome2_10_, produto0_.preco as preco3_10_ from produto produto0_ cross join produto_categoria categorias1_, categoria categoria2_ where produto0_.id=categorias1_.produto_id and categorias1_.categoria_id=categoria2_.id and (produto0_.nome like ?) and (. in (? , ?)) order by produto0_.nome asc limit ? [42001-196] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[h2-1.4.196.jar:1.4.196] 

我在做什麼錯?如何構建等同於我所需查詢的@Query?謝謝。

回答

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); 

請讓我知道,如果它不能正常工作。

+0

工作!非常感謝親愛的Chi Dov幫助我!你正在拯救我的生命:) –

+0

我特別印象如何方法名稱(第一個解決方案)推斷「隱式」內部加入 –

+0

我歡迎,我感到高興,當我每次幫助人,只是想回報什麼我從這裏學習 –

相關問題