【问题标题】:Spring data jpa default schema for native query in repository用于存储库中本机查询的 Spring data jpa 默认模式
【发布时间】:2016-12-10 20:03:56
【问题描述】:

我在 Spring Boot 应用程序中使用 Spring-dat-jpa 并尝试在存储库中执行本机查询。当我将模式名称附加到表名时它工作正常,但它不能独立工作,并且不会像我定义的实体类那样从 application.properties 文件中选择模式名称

我正在使用以下属性来设置默认模式,它适用于实体类和命名查询。但是当我在 @query 中编写任何本机查询时,它开始抱怨架构名称:

spring.jpa.properties.hibernate.default_schema=NPS_WO

以下是我的查询:

@Repository
public interface TestRepository extends JpaRepository<TypeRef,Long> {


    @Query(value="SELECT t.* from Type_Ref t")
    public List<Object[]> findAllTypes();

}

在我的实际场景中,这个查询将被一个复杂的本机查询替换。

任何帮助将不胜感激。

【问题讨论】:

  • 您能否确保SELECT t.* from Type_Ref t 实际上是一个有效的查询?我认为应该改为SELECT * from Type_Ref t
  • 我更正了查询,但仍然要求我提供架构名称
  • 这个查询不需要。 JpaRepository 具有继承(来自 CrudRepository)方法 findAll,它在此查询中按您期望的那样工作。 -->TestRepository.findAll()。 docs.spring.io/spring-data/jpa/docs/current/api/org/…
  • 我已经添加了这个查询作为一个例子,实际上我有一个查询非常复杂的需求,并且需要连接很多表。在这种情况下我该怎么办
  • 你解决了吗?

标签: hibernate spring-boot spring-data-jpa


【解决方案1】:

您可以使用 {h-schema} 在本机查询中访问默认架构名称。

所以你的查询应该是这样的:

@Query(value="SELECT t.* from {h-schema}Type_Ref t")
public List<Object[]> findAllTypes();

h-schema 和表名之间没有点,这是自动添加的。

【讨论】:

  • 这适用于单一方案。多模式会怎样?
  • 这应该被标记为答案。既然我们谈论的是“默认”模式,那么应该只有一个。
猜你喜欢
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
相关资源
最近更新 更多