我正在使用Java Persistence API来描述我将在我的代码中操作的数据库中的表。
但是,使用的架构不一样,具体取决于我的项目安装位置。所以,当我使用注释时,我希望SCHEMA字段是一个变量,但我无法做到:
@Entity
@Table(name = "TABLE_NAME", schema = schemaVariable, catalog = "")
我怎样才能实现这一目标? 是否可以使用 persistence.xml 文件?
答案 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>
通过这种方式,您可以轻松更改模式,而无需更改应用程序代码。