2017-08-02 36 views
0

謝謝你,夥計們!我已經找到了解決辦法:Spring Data JPA如何使用@repository傳遞變量

@Repository 
public interface BookRepository extends JpaRepository<Book, Integer>{  
    @Query(value = "select * from Book where find_in_set(:market,market)", nativeQuery = true) 
    public List<Book> findBooksByMarcket(@Param("market") String market); 
} 

原來的問題

我使用@Query註釋使用JPA查詢語言來創建查詢和這些查詢直接綁定到我的倉庫的方法接口。

我的數據庫被正確創建,我成功的,除了這一個來創建一些疑問:

@Repository 
public interface BookRepository extends JpaRepository<Book, Integer>{  
    @Query("select b from Book b where find_in_set(:market,b.market)") 
    public List<Book> findBooksByMarcket(@Param("market") String market); 
} 

我可以使用FIND_IN_SET功能得到正確的結果,當我檢查它雖然MySql的。但我無法在java中傳遞變量。我已經搜索了互聯網,但我找不到正確的格式。

請幫助,謝謝你們!

+2

在JPQL中沒有find_in_set這樣的事情。 JPQL和SQL是兩種不同的語言。 –

+0

爲什麼你不能使用像或= =的方式?有什麼具體原因嗎? –

+0

如果以下任何答案解決了您的問題,請將其標記爲已接受。 –

回答

0

如果你有一個自定義的MySQL函數,並希望利用它在JPA存儲庫,請看看tip 1 還有另一種方法使用CriteriaBuilder做到這一點(我用這個機制JPA規範一起):tip 2 自定義數據庫功能,JPA規範,CriteriaBuilder,標準

1

一個快速的解決方案是將JPQL查詢轉換到本機查詢(通過設置nativeQuery標誌設置爲true):爲您的搜索關鍵詞

@Query(value = "select * from Book b where find_in_set(:market,b.market)", nativeQuery = true) 
public List<Book> findBooksByMarcket(@Param("market") String market); 
+0

它來了另一個問題:語法錯誤的令牌「」選擇乙從書b其中find_in_set(:市場,b.market)「」,無效MemberValuePairs ... – xiao

+0

我已經更新了我的答案(使用'select * from ... ') –

+0

我覺得你缺少一個「價值」 – xiao

0

嘗試這

@Repository 
public interface BookRepository extends JpaRepository<Book, Integer>{  
    @Query("select b from Book b where find_in_set(?1,b.market)") 
    public List<Book> findBooksByMarcket(String market); 
} 
+0

我已經試過這個,但它不合用... – xiao

+0

任何異常都來了 –

相關問題