2.2 配置与引用
2.2 配置与引用
2.2.1 配置
?????? 无论是一个应用服务器还是单独的一个应用服务程序都是在一个持久化的工程中去进行实体的管理配置。一个持久化的工程必须在工程的META-INF文件夹下配置一个persistence.xml文件。在你的持久化的工程中所有的注解类(ie 具有一个@Entity注解)、所有的包以及所有的Hibernate的hbm.xml的配置文件都要添加到persistence.xm文件的持久化单元配置中。因此默认情况下,您的persistence.xm文件至少应该包含以下内容:
<persistence 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_1_0.xsd" version="1.0"> <persistence-unit name="sample"> <jta-data-source>java:/DefaultDS</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit></persistence>
?下面是一个更加完整的持久化文件persistence.xml的配置例子。
<persistence 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_1_0.xsd" version="1.0"> <persistence-unit name="manager1" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/DefaultDS</jta-data-source> <mapping-file>ormap.xml</mapping-file> <jar-file>MyApp.jar</jar-file> <class>org.acme.Employee</class> <class>org.acme.Person</class> <class>org.acme.Address</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit></persistence>
?name
??? (属性)每一个实体管理器必须有一个名称
?transaction-type
???? (属性)使用的事物类型。有两种:JTA和RESOURCE_LOCAL(在J2EE环境中默认是JTA,而在J2SE环境中默认是RESOURCE_LOCAL)。当使用的是jta数据源时,默认的事物类型是JTA,如果使用的不是jta数据源时,默认的事物类型就是RESOURCE_LOCAL。
??? provider
???? provider是EJB持久化提供者的固定的名称。假如你没有用到EJB3来实现你的工作的时候,就没有必要去定义这个。如果你的EJB是由某个供应商实现的,那就有必要去定义这个标签了。
???? jar-file
????? 这个jar-files里的元素需要一个特殊饿jar文件去解析。所有正确的注解类、注解包、以及hbm.xml文件都将被添加到持久化单元中去。这些元素主要用于J2EE环境中去。如果在J2SE中使用上述内容,那就不便捷了,那就需要一个绝对的路径了。您可以直接指向一个目录。
<jar-file>file:/home/turin/work/local/lab8/build/classes</jar-file>
???? class?????? class元素指定一个你将映射的固定的类名。默认情况下所有正确注解的类、所有的hbm.xml文件都被添加到持久化单元中。你可以通过类的元素添加一些额外的实体类。作为一个扩展的规范,你可以在class元素中添加一个包名(例如:<class>org.hibernate.eg</class>)。注意,这个包将包含被定义包级别的所有元数据。它将不包括该包下的所有的类。???? properties???? properties元素用于指定供应商特定的属性。在这里您将定义您的hibernate的特定配置。你也可以在这儿配置你的jdbc的连接信息。??? 因为EJB3规范要求架构验证,所以一定要按语法来定义持久化元素。如果systemId以persistence_1_0.xsd结束时,Hibernate entityManager将使用嵌入在Hibernate-entityManager.jar中的版本。在没有联网的情况下也能被成功的处理。
<persistence 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_1_0.xsd" version="1.0">
2.2.2引用
EJB3规范说明 通过EntityManagerFactory和EntityManager来定义一个引用的程序。这个启动的类就是javax.persistence.Persistence。例如:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");//orMap configOverrides = new HashMap();configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");EntityManagerFactory programmaticEmf = Persistence.createEntityManagerFactory("manager1", configOverrides);
?
第一个版本的调用等同于第二个版本带一个空的类型为Map的参数。第二个版本的Map参数内容给将覆盖定义在persistence.xml中定义的相同的参数内容。在Map参数中可以使用的EJB3的属性:
javax.persistence.provider 定义了哪一种供应商被使用javax.persistence.transactionType 定义了使用哪一种事物类型javax.persistence.jtaDataSource 定义了在JNDI中使用的数据源javax.persistence.nonJtaDataSource定义在JNDI中的非JTA数据源当?
?
?
?
?
?
为了简化编程配置,Hibernate的实体管理器提供一个专有的API。这个API与Configuration API非常相似的,并拥有相同的概念:Ejb3Configuration。请参考Javadoc和Hibernate参考指南,了解更详细的信息如何使用它。
Ejb3Configuration cfg = new Ejb3Configuration();EntityManagerFactory emf = cfg.addProperties( properties ) //add some properties .setInterceptor( myInterceptorImpl ) // set an interceptor .addAnnotatedClass( MyAnnotatedClass.class ) //add a class to be mapped .addClass( NonAnnotatedClass.class ) //add an hbm.xml file using the Hibernate convention .addRerousce( "mypath/MyOtherCLass.hbm.xml ) //add an hbm.xml file .addRerousce( "mypath/orm.xml ) //add an EJB3 deployment descriptor .configure("/mypath/hibernate.cfg.xml") //add a regular hibernate.cfg.xml .buildEntityManagerFactory(); //Create the entity manager factory
?
?