gpt4 book ai didi

java - 如何在 Jpa 存储库中编写 Sql 查询?

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:46 25 4
gpt4 key购买 nike

我正在尝试根据用户的搜索请求显示数据库中的一组记录。我认为 JPA 存储库中没有为此预定义的方法。因此我想为此在存储库中编写一个查询。

但是在构建过程中,有一个异常声明为“IllegalArgumentException”。

有人可以帮我写一个正确的查询吗?如果有更好的方法,请告诉我。

参数中的loanReport是一个有用户搜索请求的对象

    public interface LoanReportRepository extends JpaRepository<LoanReport, Long> , JpaSpecificationExecutor<LoanReport> {
public final static String GET_LOAN_REPORTS = "SELECT * FROM loan_report WHERE product=loanReport.product";

@Query(GET_LOAN_REPORTS)
List<LoanReport> findByPreference(final LoanReport loanReport);

}

最佳答案

您可以像这样调用 JPQL 查询,

public interface LoanReportRepository extends JpaRepository<LoanReport, Long> , JpaSpecificationExecutor<LoanReport> {

public final static String GET_LOAN_REPORTS = "SELECT lr FROM LoanReport lr WHERE product = :product";

@Query(GET_LOAN_REPORTS)
List<LoanReport> findByPreference(@Param("product") product);

这里的 product 可以是直接存储在 DB 列或另一个 JPA 实体中的值。在后一种情况下,实体的标识符将映射到 LoanReport 的外键约束。

您可以像这样直接传递 product 属性来调用 findByPreference

 loanReportRepository.findByPreference(loanReport.product);

参见 here了解更多信息。文档非常好。

附言

据我所知,没有内置方法可以仅传递一个对象并期望其所有/部分属性值映射到实体字段,然后映射到数据库级别的列。

另一种选择是使用 Spring Data JPA 提供的动态查询,其中包含您要搜索的所有字段。参见 here信息

如果您想在搜索查询中使用多个字段,最好的选择是将所有这些可能的参数作为方法参数传递并将它们映射到查询的参数。这种方法还允许您将用户参数值清理或转换为可以存储在数据库级别的不同格式。

关于java - 如何在 Jpa 存储库中编写 Sql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35644512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com