2012-06-08 49 views
7

我已经找了这个答案,但一直没能找到任何这样的问题,请问这个非常贴心的社区!用于dev/qa/stage/production的JPA多个持久性单元

  1. 我有一个独立的Java应用程序,可以在许多环境中部署:dev,qa,stage,production。因此,每个环境都有其自己的数据源/数据库,并且有属性文件可以管理不同的属性,具体取决于应用程序从哪个环境运行。因此,在我的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文件中?有没有比这更安全的替代方案?

谢谢社区!

p.s - 我使用EclipseLink作为JPA供应商而不是它应该重要?

这里是

<?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>  
+0

你可以添加你的persistence.xml内容,它可以帮助大家更好地理解。 –

+0

嗨Nayan,我已经添加了我的persistence.xml的剪辑谢谢! – ustad

回答

4
  1. 我的persistence.xml的一个例子“多个持久化单元定义 - 只有第一持续性 单位将被识别”就是Eclipse(大理)问题。更多关于主题 你可以从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. 
  1. 如果你不希望有密码为纯文本,有关替代的一些信息可以从​​被发现。
+0

感谢您的信息Mikko!我会投票,但我还没有资格:) – ustad

+0

谢谢Mikko,我接受了答案。看起来多个持久性单元确实很荣幸,而且它是内置JPA插件的Eclipse正在抱怨 – ustad

1

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

Project Properties => JPA => Errors/Warnings 

检查Enable project specific settings

展开Project

变化Multiple persistence units defined:Ignore