【问题标题】:JPA Entities with different schemas in test and production测试和生产中具有不同模式的 JPA 实体
【发布时间】:2018-04-24 17:46:28
【问题描述】:

我有两个 JPA 实体引用我的 DB2 数据库中的两个表,比如:

  • 架构 FIRSTSCHEMA 上的表 FIRST
  • 模式 SECONDSCHEMA 上的表 SECOND

两者都可以使用相同的凭据和数据源进行访问。此外,测试环境和生产环境的模式不同,因此我必须从配置属性文件中加载它们。

我的应用程序使用 Spring MVC 和 Hibernate。实体如下:

@Entity
@Table(name="FIRST")
public class FirstClass implements Serializable {
 ....
}

@Entity
@Table(name="SECOND")
public class SecondClass implements Serializable {
 ....
}

使用这种“模式”,查询通过在 context.xml 上配置两个实体管理器工厂来完成所有工作,一个具有默认模式 FIRSTSCHEMA,第二个具有默认模式 SECONDSCHEMA。

我希望有一种不同的方式来查询数据库,也用于事务目的(我不仅执行 SELECT 查询)。

然后我发现我可以将架构指定为@Table 注释的属性。但这必须是一个常量表达式(编译时已知),我必须从配置属性中加载它,具体取决于环境。有谁知道实现这一目标的方法,考虑使用 Spring 或任何其他技术注入值的方法?

【问题讨论】:

  • 当您需要更改部署时,在注释中硬编码架构信息是一个坏主意。你有orm.xml,或者你有persistence.xml

标签: java spring hibernate jpa database-schema


【解决方案1】:

在 Maven 中,您可以定义配置文件,并且可以使用该配置文件设置属性。

如果我是你,我会定义两个配置文件:productiontest

例如:

<profiles>
    <profile>
      <id>production</id>
      <properties>
        <schema.name>production_schema_name</schema.name>
      </properties>
    </profile>
    <profile>
      <id>test</id>
      <properties>
        <schema.name>test_schema_name</schema.name>
      </properties>
    </profile>
</profiles>

然后使用${schema.name} 访问配置文件属性。

希望对此有所帮助。

【讨论】:

  • 好主意,但我觉得这对我没有帮助,因为我必须为客户做一个ear包,并通过外部配置文件配置环境变量。
  • 在这种情况下,您可以将外部配置文件路径存储为配置文件属性吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2017-09-01
  • 2020-04-23
  • 2011-10-14
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多