Persistence Unit中的类集合

The Persistence Unit Class Set

  一个persistence unit将固定数量的一组类映射到关系数据库。缺省情况下,如果你没有在persistence.xml中指定任何元数据,persistence provider就会对包含该persistence.xml的JAR文件进行扫描,从根目录开始搜寻任何标注有 @javax.persistence.Entity注解的类,并将这些类添加到由persistence unit管理的类集合中。此外,你还可以通过<jar-file>元素指定额外的JAR文件,以供persistence provider搜索。该元素的值不能使用绝对路径,只能是一个以包含persistence.xml的JAR文件为基准的相对路径。

  <persistence>

  <persistence-unit name="titan">

  <jta-data-source>java:/OracleDS</jta-data-source>

  <jar-file>../lib/customer.jar</jar-file>

  <properties>

  <property name="org.hibernate.hbm2ddl">update</property>

  </properties>

  </persistence-unit>

  </persistence>

  JAR文件的自动扫描在Java EE环境下是保证可以正常执行的,但在Java SE应用程序中却无法做到可移植。理论上,要决定必须搜索哪些JAR文件也许是不太可能的。不过,现实中这不是问题。参与EJB 3.0专家组的主要厂商都非正式地宣称过,它们会毫无疑问的在Java SE中支持这一特性。无论是否使用自动JAR文件扫描,你都可以用<class>元素显式的列出persistence unit中的类集合。

  <persistence>

  <persistence-unit name="titan">

  <jta-data-source>java:/OracleDS</jta-data-source>

  <class>com.titan.domain.Cabin</class>

  <class> com.titan.domain.Customer</class>

  <properties>

  <property name="org.hibernate.hbm2ddl">update</property>

  </properties>

  </persistence-unit>

  </persistence>

  <class>元素中所列的Cabin和Customer类将会与其他从persistence unit中检索出来的类一起被添加到类集合中。如果不希望自动扫描Persistence.xml中JAR文件中的类,那么你可以使用< exclude-unlisted-classes>元素。

  <persistence>

  <persistence-unit name="titan">

  <jta-data-source>java:/OracleDS</jta-data-source>

  <class>com.titan.domain.Cabin</class>

  <class>com.titan.domain.Customer</class>

  <exclude-unlisted-classes/>

  <properties>

  <property name="org.hibernate.hbm2ddl">update</property>

  </properties>

  </persistence-unit>

  </persistence>

  最终,类集合将由所有下列元数据的合集来决定。

  包含persistence.xml的JAR文件中标有@Entity注解的类(除非指定了<exclude- unlisted-classes>)

  <jar-file>元素指定的JAR文件里标有@Entity注解的类

  在META-INF/orm.xml文件里映射的类(如果存在该文件的话)

  在<mapping-file>元素所指定的XML文件中映射的类

  任何用<class>元素列出的类

  通常情况下,你无需指定<class>,<jar-file>或<mapping-file>元素。但是有一种情形你可能需要使用上述元素,即当你需要在两个或多个persistence unit中映射同一个类时。

你可能感兴趣的:(java,xml,orm,ejb)