OpenJPA>是否可以在名称为persistence.xml的META-INF之外的其他位置定义持久性xml文件

时间:2016-05-25 12:35:34

标签: openjpa persistence.xml

我是一名新的OpenJPA 2.2.2用户。我注意到必须在META-INF / persistence.xml中定义数据库配置。这听起来太不灵活了。此外,我从OpenJPA 2.2.2文档中找到了:

OpenJPA运行时包括一个全面的配置默认值和覆盖系统:

  • OpenJPA首先查找可选的openjpa.xml资源。 OpenJPA在C​​LASSPATH的每个顶级目录中搜索此资源。如果您将资源放在CLASSPATH的任何顶级目录中的META-INF目录中,OpenJPA也会找到该资源。 openjpa.xml资源包含 JPA的XML格式中的属性设置。
  • 您可以通过在openjpa.properties系统属性中指定正确的资源路径来自定义上述资源的名称或位置。

基于上面的介绍,似乎数据库配置文件名只能是 persistence.xml 。此外,我试图将它放在我的CLASSPATH的顶级目录中,即不在META-INF目录中,它根本不起作用!是否有任何方法可以更灵活地定义此数据库持久性xml,比如META-INF以外的其他地方以及除persistence.xml之外的其他名称?

1 个答案:

答案 0 :(得分:0)

首先,没有替换persistence.xml(简称p.xml)。无论如何都需要这样做。此外,该文件的位置在JPA规范中明确定义(例如,参见JPA 2.0规范中的“8.2持久性单元打包”)。你必须遵循这些包装规则。 OpenJPA首先遵循规范关于此文件及其设置的规则。没有JPA提供程序会忽略w.r.t p.xml文件的规则。 您复制/粘贴的文本部分来自OpenJPA文档:

http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual#ref_guide_conf_specify

如您所见,本节描述了一个名为openjpa.xml的可选文件。此文件不替换p.xml文件!它增加了它。正如文档所述,它仅用于添加属性。也就是说,您无法在此定义持久性单元,您可以定义的唯一属性是属性(即)。如果在此处定义持久性单元,则不会使用它。举个例子,让我们看一下这个openjpa.xml文件:

<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">

<persistence-unit name="">
    <properties>
        <property name="openjpa.jdbc.Schema" value="MySchema" />
        <property name="openjpa.jdbc.DBDictionary" value="db2" />
    </properties>
</persistence-unit>

此文件定义了两个属性。请注意,持久性单元名称为空。这是故意的,因为正如我上面提到的,我们无法在此文件中定义持久性单元。最后,您可以将此文件放在类路径中的META-INF中,如文档中所述。如果你将它放在与p.xml文件相同的位置,它将被找到。例如,在我的JSE JUnit测试中,我将它放在我的硬盘驱动器上的目录e:/openjpaConfig/META-INF/openjpa.xml中。然后我在我的JUnit测试中放入一个类路径条目,指向目录e:/ openjpaConfig。类路径可以指向一个jar,它在META-INF目录中包含该文件。在Java EE环境中,您可以将文件放在.jar文件中,并将.jar文件放在耳朵的lib目录中。