【转】Persistence Unit中的类集合 博客分类: EJB3.0 EJB3.0
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中映射同一个类时。