JPA实体在测试和生产中具有不同的模式

时间:2017-11-11 17:19:26

标签: java spring hibernate jpa database-schema

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

  • 关于架构FIRSTSCHEMA的第一表
  • 表SECONDDSCHEMA上的SECOND

两者都可以使用相同的凭据和数据源访问。而且,模式在测试和生产环境之间是不同的,然后我必须从配置属性文件中加载它们。

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

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

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

使用此"模式",查询通过在context.xml上配置两个Entity Managers Factory来完成所有工作,一个使用默认架构FIRSTSCHEMA,另一个使用默认架构SECONDSCHEMA。

我想以不同的方式查询数据库,也是为了事务目的(我不仅执行SELECT查询)。

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

1 个答案:

答案 0 :(得分:0)

在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}访问个人资料属性。

希望能帮到你。