gpt4 book ai didi

java - 当查询存储为外部文件时,如何在 Spring boot 存储库中填充 native 查询的 @Query 值

转载 作者:行者123 更新时间:2023-12-01 19:32:07 27 4
gpt4 key购买 nike

类似的问题早在 2015 年就已被提出并得到回答 here .

但是,我不想将查询存储在 XML 文件中,而是希望将它们存储在外部 .sql 文件中并从那里读取查询。为了在我们的 Spring Boot 应用程序中实现这一点 - 使用 Java 8 的 2.1.5.RELEASE ,我们将查询存储在资源文件夹中,如下所示

src/main/resources
- 查询
-A.sql
-B.sql

要阅读上述查询,我​​在 QueryReader 类中阅读它们,如下所示

@Component
public class QueryReader {

public String getQueryFromFile(String fileName) {
System.out.println("getQueryFromFile() : " + fileName);
return this.convertInputStreamToString(this.getTemplateAsStream(fileName));
}




private InputStream getTemplateAsStream(String queryFileName){
ClassLoader classLoader = getClass().getClassLoader();
InputStream iStream =classLoader.getResourceAsStream("queries/" + queryFileName);

return iStream;
}
}

要在代码中的任何位置使用它,我有下面的类,以便我可以调用它的方法

@Component
public class MyQueries {


@Autowired
private QueryReader qfr;

public String queryErroredRecords() {
return qfr.getQueryFromFile("A.sql");
}

将其与 JDBCTemplate 一起使用时,这会按预期工作,但是当我尝试从 Repository 中的 @Query 注释使用此方法时,我无法执行此操作,并出现以下错误。

存储库代码

@Repository
public interface AdminRepository extends JpaRepository<OrderBackupRecordEO, BigDecimal>{

@Autowired
public MyQueries queries;


@Query(value = queries.queryErroredRecords() , nativeQuery= true)
List<String> findX();
}

上述存储库给出的错误如下:

1.注解属性Query.value的值必须是常量表达式(对于@Query注解)

2.空白的最终字段查询可能尚未初始化(对于@Autowired注解)

我怎样才能让它发挥作用?

最佳答案

我只是添加一条可能对您有帮助的注释。

您的解决方案无法工作,只是因为在接口(interface)中的java中,所有字段(变量)默认都是publicstaticfinal并且这就是为什么你不能@Autowire接口(interface)内的任何依赖项。

这就是为什么它适用于 JDBCTemplate (这是一个类)的情况,但不适用于 spring 数据存储库(这是一个接口(interface))。

关于java - 当查询存储为外部文件时,如何在 Spring boot 存储库中填充 native 查询的 @Query 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59388826/

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