`
阅读更多

2.2 配置与引用

2.2.1 配置

       无论是一个应用服务器还是单独的一个应用服务程序都是在一个持久化的工程中去进行实体的管理配置。一个持久化的工程必须在工程的METAINF文件夹下配置一个persistence.xml文件。在你的持久化的工程中所有的注解类(ie 具有一个@Entity注解)、所有的包以及所有的Hibernatehbm.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是由某个供应商实现的,那就有必要去定义这个标签了。

    jta-data-source,non-jta-data-source

     这是javax.sql.DataSource所在的JNDI名称没有可用的JNDI数据源运行时,必须指定使用Hibernate特定属性的JDBC连接(见下文)    mapping-file     类元素指定一个你将映射EJB3标准的XML映射文件。这个文件必须在classpath中。根据EJB3规范,Hibernate的EntityManager中会尝试加载位于在META_INF/ orm.xml中的jar文件映射文件。当然,任何显式的映射文件将被加载。事实上,你可以在映射文件中的任意元素,即提供任何XML文件。无论是hbm文件或EJB3的部署描述符。

     jar-file

      这个jar-files里的元素需要一个特殊饿jar文件去解析。所有正确的注解类、注解包、以及hbm.xml文件都将被添加到持久化单元中去。这些元素主要用于J2EE环境中去。如果在J2SE中使用上述内容,那就不便捷了,那就需要一个绝对的路径了。您可以直接指向一个目录。

<jar-file>file:/home/turin/work/local/lab8/build/classes</jar-file>

exclude-unlisted-classes      不检查注解类的主要jar文件。明确持久化单元中的类。

     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");
//or
Map 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数据源
Persistence.createEntityManagerFactory() 方法被调用时,程序将使用ClassLoader.getResource("META-INF/persistence.xml")方法去搜索工程下的META-INF/persistence.xml文件。其实Persistence类将着眼于classpath中可用的持久性提供者,让他们中一个来创建实体管理器工厂manager1。资源名单中的供应商会尝试去找到一个在persistence.xml文件中指定的实体管理器(当然provider元素必须与当前持续提供商匹配)。如果persistence.xml文件没有被找到或者持久性的提供商没有被找到,那么系统将抛出PersistenceException 异常。
    除了Hibernate的系统级设置在Hibernate中所有可用的属性可以在persistence.xml文件的属性元素作为Map参数中的一个属性覆盖设置传递给createEntityManagerFactory请参考Hibernate参考文档的完整列表。下面是EJB3提供商提供的一些属性
表2.1 hibernate实体管理器特定的属性
  1. hibernate.ejb.classcache  类缓存策略
  2. hibernate.ejb.collectioncache.<collectionrole> 集合缓存策略
  3. hibernate.ejb.cfgfile 配置hibernate的xml配置文件
  4. hibernate.archive.autodetection 确定哪些元素是自动由Hibernate实体管理器在解析
  5. hibernate.ejb.interceptor   一个可选的Hibernate拦截器。拦截器实例由所有会话实例共享。该拦截器必须实现org.hibernate.Interceptor并且有一个默认的无参构造函数。这个属性不能与hibernate.ejb.interceptor.session_scoped结合
  6. hibernate.ejb.interceptor.session_scoped 一个可选的Hibernate拦截器。拦截器的实例针对特定的Session实例(因而可以是非线程安全的该拦截器必须实现org.hibernate.Interceptor并且有一个默认的无参构造函数。这个属性不能与hibernate.ejb.interceptor结合
  7. hibernate.ejb.naming_strategy 一个可选的命名策略使用默认的命名策略是EJB3NamingStrategy您也可以考虑DefaultComponentSafeNamingStrategy
  8. hibernate.ejb.event.<eventtype> 事件侦听器列表中一个给定的事件类型事件侦听器列表是一个逗号分隔的完全限定类名列表( hibernate.ejb.event.pre-load com.acme.SecurityListenercom.acme.AuditListener
  9. hibernate.ejb.use_class_enhancer 在部署时是否使用应用程序服务器类增强默认为false)
  10. hibernate.ejb.discard_pc_on_close 如果为true,持久化上下文将被丢弃调用该方法,考虑clear().否则持久化上下文会保持活跃状态持续下去,直到事物完成所有的对象将保持管理,任何变化都会与数据库同步默认情况下等待事物完成

请注意,您可以混合使用XML<class>定义hibernate.ejb.cfgfile 使用相同的配置。应该注意发生冲突的可能性。在persistence.xml中设置的属性将覆盖在hibernate.cfg.xml中定义之一。

提醒

不重写hibernate.transaction.factory_class是很重要的。Hibernate EntityManager将根据EntityManager 的类型自动的设置适当的事物工场。如果你的环境是J2EE环境,你有可能得设置hibernate.transaction.manager_lookup_class。

 

 

下面是在J2SE环境中的典型配置:

 

<persistence>
   <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
      <class>org.hibernate.ejb.test.Cat</class>
      <class>org.hibernate.ejb.test.Distributor</class>
      <class>org.hibernate.ejb.test.Item</class>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
         <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
         <property name="hibernate.connection.username" value="sa"/>
         <property name="hibernate.connection.password" value=""/>
         <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
         <property name="hibernate.max_fetch_depth" value="3"/>
       
         <!-- cache configuration -->
         <property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/>
         <property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors" value="read-write, RegionName"/>

         <!-- alternatively to <class> and <property> declarations, you can use a regular hibernate.cfg.xml file -->
         <!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ -->
      </properties>
   </persistence-unit>
</persistence>

 

 

 

 

 

 

为了简化编程配置Hibernate的实体管理器提供一个专有的API这个API与Configuration API非常相似的,并拥有相同的概念:Ejb3Configuration请参考JavadocHibernate参考指南,了解详细的信息如何使用它

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

 

 

分享到:
评论

相关推荐

    JSF2.2基本jar包

    开发者在编写代码时,通常会直接引用这个jar包中的接口,以确保与JSF框架的交互符合标准。它定义了如`UIComponent`、`FacesContext`、`ManagedBean`等重要接口,是理解和实现JSF应用程序的基础。 2. **jsf-impl.jar...

    基于Compass2.2与Spring 结合建立索引的实例

    ### 基于Compass2.2与Spring结合建立索引的实例 #### 一、Compass简介 Compass是一个开源的.NET和Java框架,它为应用程序提供了完整的文本搜索功能。该框架支持多种搜索引擎(如Elasticsearch, Solr等),使得开发...

    android-2.2_r01-windows1

    3. **android.jar** - 这是Android SDK的核心库文件,包含了Android 2.2版的API类和方法,开发者可以引用它来编写兼容此版本的代码。 4. **source.properties** - 此文件记录了Android源代码的相关属性,比如版本...

    ExtJS 2.2 (enable oozie ui console 需要)

    安装并正确配置ExtJS 2.2后,Oozie Web Console应该能正常运行,提供完整的用户界面和功能,允许管理员监控和管理Hadoop工作流。然而,值得注意的是,ExtJS 2.2已经是一个非常老的版本,可能存在安全风险和兼容性...

    opencv2.2+x64版本

    为了使用这个版本的OpenCV,开发者需要将其添加到项目构建路径中,配置相应的库链接,并根据需要包含头文件。对于64位系统,确保编译器设置为64位模式,以匹配库文件。在开发过程中,可以参考提供的示例代码,或者...

    android2.2源码编译-Ubuntu10.04 (X86) + android2.2 + JDK1.6

    为了确保编译过程中正确引用JDK,需要设置一些环境变量。编辑`.bashrc`文件,添加以下内容: ```sh JAVA_HOME=/usr/lib/jvm/java-6-sun JRE_HOME=${JAVA_HOME}/jre export ANDROID_JAVA_HOME=$JAVA_HOME export ...

    LIN-Spec_2.2

    - LIN 2.2 保持了与 LIN 1.3 的大部分兼容性,但在某些方面进行了改进和增强。 - 包括对信号类型的支持以及同步机制的更新。 - **1.1.7.2 Compatibility with LIN 2.0** - LIN 2.2 继承了 LIN 2.0 的基本框架,...

    FCKEditor2.2

    FCKEditor的相关文件,如编辑器的JavaScript库、样式表和图片,可能就位于这个目录下,开发者可以通过引用这些资源在网页上实现FCKEditor的功能。 - **src**:这个目录可能包含了FCKEditor的源代码,如Java类文件或...

    pdfjs-2.2.228-dist.zip

    "pdfjs-2.2.228-dist.zip" 是PDF.js的一个特定版本(2.2.228)的发行版压缩包,它包含了库的源码和其他必要的资源文件。 在压缩包中,`LICENSE` 文件通常包含了关于软件授权的信息。对于PDF.js来说,它很可能遵循...

    rxtx-2.2_win64.rar

    《RXTX库在Win10系统中的应用与配置详解》 在当今信息化时代,串口通信技术在各种硬件设备的连接与数据交换中扮演着重要角色。在Windows 10操作系统环境下,开发者通常需要借助特定的库来实现串口通信功能。其中,...

    android2.2SDK

    1. **环境配置**:安装SDK,配置环境变量,确保`adb`可以在命令行中使用。 2. **创建项目**:使用Android Studio或其他IDE,选择2.2对应的API级别创建新项目。 3. **编写代码**:使用Java或Kotlin语言,根据Android ...

    无惧上传类 V2.2脚本和使用手册

    5. 集成与应用:在实际项目中,开发者需要将无惧上传类的脚本引用到ASP网页中,通过调用其提供的函数来实现文件上传功能。这通常涉及编写HTML表单、配置服务器环境以及编写ASP脚本来处理上传后的文件。 6. 安全性...

    OpenVC2.2 for VS2008

    1. **解压与安装**:首先,将压缩包解压到合适的目录下,例如C:\OpenCV2.2。 2. **环境变量**:添加OpenCV的包含目录和库目录到系统的PATH环境变量。例如,添加`C:\OpenCV2.2\include`和`C:\OpenCV2.2\lib`。 3. **...

    java串口通信操作的jar包rxtx-2.2(内含32位与64位版本)

    Java串口通信是Java应用程序与外部设备通过串行端口进行数据交换的一种方式,而RXTX库则是Java实现串口通信...在开发过程中,理解RXTX库的安装配置以及其提供的API是至关重要的,这将极大地简化与硬件设备的集成工作。

    移动代理服务器MAS短信API2.2开发手册及DEMO

    在提供的文档中,"移动代理服务器MAS短信API2.2开发手册(.Net).pdf"详细介绍了如何在.NET环境中使用API,包括必要的库引用、方法调用、参数设置等。开发者可以按照手册中的步骤,结合.NET平台的特性,实现短信服务的...

    FreeTextBox 3.2.1与FCKeditor 2.2

    在使用这两个编辑器时,开发者需要将相应的DLL文件(如FreeTextBox.dll和FredCK.FCKeditorV2.dll)引入到项目中,然后在网页上通过ASP.NET控件或JavaScript引用来添加编辑器。对于FreeTextBox,可以在ASP.NET页面上...

    FusionCharts_free2.2

    1. **安装与配置**:首先,你需要下载FusionCharts Free 2.2的压缩包,其中包含了必要的JavaScript库文件和示例代码。解压后,将所需的JavaScript文件(如`FusionCharts.js`)复制到你的项目目录下,并确保在HTML...

    xjad2.2.zip

    标题 "xjad2.2.zip" 提供了一个关于反编译工具的压缩包,其中包含的是Eclipse的Jad插件及其配置指南。这个压缩包的目的是帮助开发者在没有源码的情况下查看Java类的源代码。 描述中提到,"eclipse反编译插件,包含...

Global site tag (gtag.js) - Google Analytics