7

我一直在寻找答案,但找不到任何答案,所以向这个非常合适的社区提出这些问题!

  1. 我有一个独立的 Java 应用程序,可以部署在许多环境中:dev、qa、stage、production。因此,每个环境都有自己的数据源/数据库,并且有一些属性文件根据应用程序运行的环境管理不同的属性。因此,在我的 persistence.xml 中,我为 dev 定义了一个持久性单元。在同一个文件中,我还想为其他环境定义持久性单元。这样做时,Eclipse(Indigo - 最新)抱怨如下:“定义了多个持久性单元 - 只有第一个持久性单元将被识别”。假设我所做的是合法的,这是一个 Eclipse 问题.. 任何人都可以确认吗?还,
  2. 我假设任何标有 @Entity 注释的实体 bean 都会自动被拾取,而不必像这样在 persistence.xml 文件中显式定义它<class>com.mycompany.model.MyEntityBean</class>:如果我在文件中省略了实体类的显式包含,实体 bean(尽管已注释)会引发错误: “类“com.mycompany.model.MyEntityBean”已映射,但未包含在任何持久性单元中” 我我假设错了吗?
  3. 我的最后一个问题是关于 db 凭据:将我的 db 凭据以纯文本形式放在 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>    
4

2 回答 2

4
  1. “定义了多个持久性单元 - 只有第一个持久性单元将被识别”是 Eclipse (Dali) 问题。您可以从错误 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.
  1. 如果您不想使用纯文本形式的密码,可以从EclipseLink 文档中找到有关替代方案的一些信息。
于 2012-06-08T17:31:38.007 回答
1

您可以通过执行以下操作来关闭错误警告。这些说明适用于 Eclipse Luna。

Project Properties => JPA => Errors/Warnings

查看Enable project specific settings

展开Project

更改Multiple persistence units defined:Ignore

于 2015-04-29T22:47:22.447 回答