JPA在注释中使用变量Schema名称

时间:2014-09-03 10:37:33

标签: java hibernate jpa database-schema

我正在使用Java Persistence API来描述我将在我的代码中操作的数据库中的表。

但是,使用的架构不一样,具体取决于我的项目安装位置。所以,当我使用注释时,我希望SCHEMA字段是一个变量,但我无法做到:

@Entity
@Table(name = "TABLE_NAME", schema = schemaVariable, catalog = "")

我怎样才能实现这一目标? 是否可以使用 persistence.xml 文件?

3 个答案:

答案 0 :(得分:1)

不,这是不可能的。您只能在注释中使用编译时常量(它们都是基元和String)。

您可以使用最终变量:

public class DatabaseMetadata {
    public static final SCHEMA = "MySchema";
}

然后在注释中使用它:

@Table(name = "TABLE_NAME", schema = DatabaseMetadata.SCHEMA, catalog = "")

但我认为这不是你想要的。

PS。另一方面,可以找到在注释中使用例如Spring EL的示例(请参阅@Value注释),但这需要自定义注释处理器。 AFAIK没有JPA提供商给你这样的能力。

答案 1 :(得分:0)

在IM类中放置模式信息(如表,列,模式名称)是一个坏主意(如果要在其他地方部署,则强制重新编译)。您可以将该信息放在orm.xml中,然后根据您的部署要求部署不同的orm.xml

对于persistence.xml,您将依赖于具有定义默认架构/目录的持久性属性的JPA提供程序。我知道DataNucleus JPA(我使用的)有这个,但不知道Hibernate

答案 2 :(得分:0)

如果你知道你将使用不同的模式,我建议使用2个映射文件并定义

<entity-mappings> 
    <persistence-unit-metadata> 
       <persistence-unit-defaults> 
          <schema>HR</schema> 
       </persistence-unit-defaults> 
    </persistence-unit-metadata> 
... 
</entity-mappings> 

通过这种方式,您可以轻松更改模式,而无需更改应用程序代码。