用于dev/qa/stage/production的JPA多个持久性单元

ust*_*tad 7 jpa persistence.xml eclipselink

我已经为此找到了答案但是却未能找到任何这样的问题来向这个非常适合的社区提问!

  1. 我有一个独立的Java应用程序,可以在许多环境中部署:dev,qa,stage,production.因此,每个环境都有自己的数据源/ db,并且有属性文件根据运行应用程序的环境来管理不同的属性.因此,在我的persistence.xml中,我为dev定义了一个持久性单元.在同一个文件中,我还想为其他环境定义持久性单元.这样做时,Eclipse(Indigo - latest)抱怨如下:"定义多个持久性单元 - 只识别第一个持久性单元".假设我所做的是合法的,这是一个Eclipse问题..任何人都可以确认吗?此外,鉴于我目前的设置,这是最佳实践吗?
  2. 我假设任何标有@Entity注释的实体bean都会被自动获取而不必在persistence.xml文件中明确定义它,如下所示:<class>com.mycompany.model.MyEntityBean</class>.如果我省略在文件中显式包含实体类,则实体bean - 虽然注释 - 会引发错误: "类"com.mycompany.model.MyEntityBean"已映射,但未包含在任何持久性单元中" 我是什么我错了吗?
  3. 我的最后一个问题是关于数据库凭据:最好的做法是将我的数据库凭据以纯文本形式放在persistence.xml文件中吗?有没有更安全的替代方案?

谢谢社区!

ps - 我使用EclipseLink作为JPA供应商而不是它应该重要吗?

这是我的persistence.xml的一个例子

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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_2_0.xsd">
    <persistence-unit name="Development">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.mycompany.model.MyEntityBean</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:db2://xxxxxxx" />
            <property name="javax.persistence.jdbc.password" value="xxxxxx" />
            <property name="javax.persistence.jdbc.user" value="xxxxxxxx" />
        </properties>
    </persistence-unit>
    <persistence-unit name="QA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.mycompany.model.MyEntityBean</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:db2://xxxxxxx" />
            <property name="javax.persistence.jdbc.password" value="xxxxxx" />
            <property name="javax.persistence.jdbc.user" value="xxxxxxxx" />
        </properties>
    </persistence-unit>
</persistence>    
Run Code Online (Sandbox Code Playgroud)

Mik*_*unu 4

  1. “定义了多个持久性单元 - 只有第一个持久性单元将被识别”是 Eclipse (Dali) 问题。有关主题的更多信息,您可以从bug 231527中找到。

  2. 由于您有独立的 Java SE 应用程序,因此应在 persistence.xml 中列出实体。在规范中,其说明如下:

      To insure the portability of a Java SE application, it is necessary
      to explicitly list the managed persistence classes that are included 
      in the persistence unit using the class element of the persistence.xml 
      file.
Run Code Online (Sandbox Code Playgroud)
  1. 如果您不想使用纯文本形式的密码,可以从EclipseLink 文档中找到有关替代方案的一些信息。