【问题标题】:Spring Data JPA, Hibernate @TableSpring Data JPA,休眠@Table
【发布时间】:2020-11-19 08:52:18
【问题描述】:

我有一个问题: 我的应用程序有一个 MSSQL 主机,其中有 2 个数据库。 我所有的实体都看基数:

  1. 一个实体应该查看基础
  2. 我可以通过在@Table 参数中指定基数来做到这一点 (schema = databasename.schema)

有没有办法让@Table(模式)参数来自application.properties?

【问题讨论】:

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


    【解决方案1】:

    是的,它是possible。查看以下属性:

    <property name="hibernate.default_catalog" value="crm"/>
    <property name="hibernate.default_schema" value="analytics"/>
    

    可以在spring bootapplication.properties中使用以下属性:

    spring.jpa.properties.hibernate.default_catalog=crm
    spring.jpa.properties.hibernate.default_schema=analytics
    

    还请查看@Table 注释documentation。当您设置架构属性时,休眠使用此指定架构,否则使用您可以通过hibernate.default_schema 提供的用户默认架构。

    您也可以尝试编写自定义架构名称解析器。正如documentation 中针对hibernate.schema_name_resolver 属性所述:

    默认情况下,Hibernate 使用org.hibernate.dialect.Dialect#getSchemaNameResolver。您可以通过提供SchemaNameResolver 接口的自定义实现来自定义模式名称的解析方式。

    【讨论】:

    • 在这种情况下,我的所有实体都将开始查看此架构。而我只需要一个。
    • 如果您只在一个地方需要它,为什么要全局设置?
    • 如有必要,我应该能够通过配置覆盖这些参数
    • 您可以通过hibernate.default_schema 设置最常用的架构,然后通过@Table (schema) 覆盖它。
    • 这正是我想做的,只有在重新定义的时候,才使用属性中的变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2016-05-03
    • 2012-07-30
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多