有没有办法在Spring Boot存储库级别的@query中动态添加数据库和模式名称

问题描述 投票:0回答:1

我有多个架构,并且在 application.properties 文件中我提到了一个架构名称。

但是我有一个存储库,其中包含我正在查询不同模式中的表的查询。我将数据库和模式名称作为参数传递给方法。

@Query(value="select * from :db.:schema.Customer",nativeQuery=true)
List<Entity> fetchEntities(@param("db") String db, @Param("schema") String schema);

但这不起作用。如有任何帮助,我们将不胜感激。

java spring jpa repository nativequery
1个回答
0
投票

由于 JPA 在底层准备 SQL 查询的方式,不支持对架构名称使用参数。但是,您可以构造 SQL 查询字符串,动态设置架构,并利用

EntityManager
执行查询:

 @PersistenceContext
 private EntityManager entityManager;

 public List<Entity> fetchEntities(String db, String schema) {
      String sql = "SELECT * FROM " + db + "." + schema + ".Customer";
      Query query = entityManager.createNativeQuery(sql, Entity.class);
  }
© www.soinside.com 2019 - 2024. All rights reserved.