【问题标题】:Spring Data JPA how to pass a variable by using @repositorySpring Data JPA如何使用@repository传递变量
【发布时间】:2018-01-09 04:44:51
【问题描述】:

谢谢你们,伙计们!我找到了解决方案:

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

当我通过 MySql 进行检查时,我可以使用 find_in_set 函数得到正确的结果。但是我无法在java中传递一个变量。我已经在互联网上搜索过,但找不到正确的格式。

请帮忙,谢谢你们!

【问题讨论】:

  • JPQL 中没有 find_in_set 这样的东西。 JPQL 和 SQL 是两种不同的语言。
  • 顺便说一句为什么不能用like或=?有什么具体原因吗?
  • 如果以下任何一个答案解决了您的问题,请将其标记为已接受。

标签: java mysql spring-data-jpa


【解决方案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);

【讨论】:

  • 又出现了一个问题:token ""select b from Book b where find_in_set(:market,b.market)"" 的语法错误,MemberValuePairs 无效...
  • 我认为你缺少一个“价值”
【解决方案2】:

如果您有自定义 MySQL 函数并想在 JPA 存储库中使用它,请查看tip 1 还有另一种使用 CriteriaBuilder 的方法(我将此机制与 JPA 规范一起使用):tip 2 搜索关键词:自定义 db 函数、JPA 规范、CriteriaBuilder、Criteria

【讨论】:

    【解决方案3】:

    试试这个

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

    【讨论】:

    • 任何异常即将到来
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2015-01-12
    • 2020-10-30
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多