2017-08-02 351 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

任何异常都来了 –

相关问题