Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenJPA模式配置_Jpa_Openjpa - Fatal编程技术网

OpenJPA模式配置

OpenJPA模式配置,jpa,openjpa,Jpa,Openjpa,我正在WebSphere和DB2上使用OpenJPA1.2.3。 是否有一种方法可以构建和绑定我的应用程序,使同一应用程序(EAR)能够基于环境(DEV、ACPT、PROD等)更改模式名称 我的PU设置为容器管理,如下所示: <persistence> <persistence-unit name="My_PU" transaction-type="JTA"> <jta-data-source>jdbc/DataSource&l

我正在WebSphere和DB2上使用OpenJPA1.2.3。 是否有一种方法可以构建和绑定我的应用程序,使同一应用程序(EAR)能够基于环境(DEV、ACPT、PROD等)更改模式名称

我的PU设置为容器管理,如下所示:

<persistence>
    <persistence-unit name="My_PU" transaction-type="JTA">
            <jta-data-source>jdbc/DataSource</jta-data-source>
            ...
            <properties>
                    <property name="openjpa.jdbc.Schema" value="MYSCHEMA"/>
                    <property name="openjpa.TransactionMode" value="managed"/>
                    <property name="openjpa.ConnectionFactoryMode" value="managed"/>
            </properties>
    </persistence-unit>
</persistence>
    <persistence>
        <persistence-unit name="persistent-unit" transaction-type="JTA">
                <jta-data-source>jdbc/DataSource</jta-data-source>
                ...
                <properties>
                        <property name="openjpa.jdbc.Schema" value="${db-schema}"/>
                        <property name="openjpa.TransactionMode" value="managed"/>
                        <property name="openjpa.ConnectionFactoryMode" value="managed"/>
                </properties>
        </persistence-unit>
    </persistence>

jdbc/数据源
...
我已经考虑过将其放在ORM.xml中,但这仍然是模式的静态值,并且没有将设置外部化;而且,它似乎不起作用(我已经看到许多线程在讨论这个问题)。我还研究了将此配置放入WebSphere数据源;这似乎也不起作用


--Keith

我不熟悉OpenJPA,但我猜
OpenJPA.jdbc.Schema
属性是可选的。数据源(即位于
jdbc/datasource
的数据源)将指定正在使用的默认模式


您是否尝试不使用属性?

我只是创建单独的
元素,然后动态选择要绑定的元素。
例如:

<persistence>
    <persistence-unit name="DEV_PU" transaction-type="JTA">
            <jta-data-source>jdbc/DataSource</jta-data-source>
            ...
            <properties>
                    <property name="openjpa.jdbc.Schema" value="DEVSCHEMA"/>
                    <property name="openjpa.TransactionMode" value="managed"/>
                    <property name="openjpa.ConnectionFactoryMode" value="managed"/>
            </properties>
    </persistence-unit>
    <persistence-unit name="PROD_PU" transaction-type="JTA">
            <jta-data-source>jdbc/DataSource</jta-data-source>
            ...
            <properties>
                    <property name="openjpa.jdbc.Schema" value="PRODSCHEMA"/>
                    <property name="openjpa.TransactionMode" value="managed"/>
                    <property name="openjpa.ConnectionFactoryMode" value="managed"/>
            </properties>
    </persistence-unit>
</persistence>

jdbc/数据源
...
jdbc/数据源
...

您可以在代码中动态设置架构名称,如下所示:

@Entity
@Table(name = "ITEM", schema=Item.SCHEMA)
public class Item implements Serializable {

    public static final String SCHEMA = System.getProperty("env.schema");

    @Id
    @Column (name = "ITEM_ID")
    private String id;

    @Column (name = "ITEM_NAME")
    private String name;
}
你可以用maven

1-在项目pom文件或maven设置中为每个构建场景定义概要文件

    <profiles>
        <profile>
            <id>DEV Profile</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <propertis>
                <db-schema>DEVSCHEMA</db-schema>
            </propertis>
        </profile>

        <profile>
            <id>PROD Profile</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <propertis>
                <db-schema>PRODSCHEMA</db-schema>
            </propertis>
        </profile>
    </profiles>

开发人员配置文件
真的
DEVSCHEMA
产品简介
假的
PRODSCHEMA
2-按如下方式更改persistence.xml:

<persistence>
    <persistence-unit name="My_PU" transaction-type="JTA">
            <jta-data-source>jdbc/DataSource</jta-data-source>
            ...
            <properties>
                    <property name="openjpa.jdbc.Schema" value="MYSCHEMA"/>
                    <property name="openjpa.TransactionMode" value="managed"/>
                    <property name="openjpa.ConnectionFactoryMode" value="managed"/>
            </properties>
    </persistence-unit>
</persistence>
    <persistence>
        <persistence-unit name="persistent-unit" transaction-type="JTA">
                <jta-data-source>jdbc/DataSource</jta-data-source>
                ...
                <properties>
                        <property name="openjpa.jdbc.Schema" value="${db-schema}"/>
                        <property name="openjpa.TransactionMode" value="managed"/>
                        <property name="openjpa.ConnectionFactoryMode" value="managed"/>
                </properties>
        </persistence-unit>
    </persistence>

jdbc/数据源
...
3-在项目pom文件中放入以下行

    <build>        
        <resources>
            <resource>
                <directory>src/main/resources/META-INF</directory>
                <filtering>true</filtering>
                <targetPath>/META-INF</targetPath>
            </resource>
        </resources>
    </build>

src/main/resources/META-INF
真的
/META-INF

@Keith:好的,发生了什么事?请帮我一个忙。我认为这行不通,属性值必须是常量:(