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

时间:2012-06-08 15:45:10

标签: jpa eclipselink persistence.xml

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

  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 - 虽然已注释 - 会引发错误:“Class”com.mycompany.model.MyEntityBean“已映射,但不包含在任何持久性单元中“我有什么假设?
  3. 我的最后一个问题是关于数据库凭据:最佳做法是将我的数据库凭据以纯文本形式放在persistence.xml文件中吗?有没有更安全的替代方案?
  4. 谢谢社区!

    p.s - 我使用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>    
    

1 个答案:

答案 0 :(得分:4)

  1. “定义了多个持久性单元 - 只有第一个持久性 单位将被认可“是Eclipse(大理)问题。更多关于主题 你可以从bug 231527找到。

  2. 因为您有独立的Java SE应用程序,所以实体应该在persistence.xml中列出。在规范中,这个拼写如下:

  3.       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.
    
    1. 如果您不想将密码作为纯文本,可以从EclipseLink documentation找到有关替代密码的一些信息。