`

Hibernate Core Reference Manual学习笔记——Chapter 3. Configuration

    博客分类:
  • java
阅读更多

Hibernate Core Reference Manual

 

Chapter 3. Configuration

Table of Contents

3.1. Programmatic configuration
3.2. Obtaining a SessionFactory
3.3. JDBC connections
3.4. Optional configuration properties

3.4.1. SQL Dialects
3.4.2. Outer Join Fetching
3.4.3. Binary Streams
3.4.4. Second-level and query cache
3.4.5. Query Language Substitution
3.4.6. Hibernate statistics
3.5. Logging
3.6. Implementing a NamingStrategy
3.7. Implementing a PersisterClassProvider
3.8. XML configuration file
3.9. Java EE Application Server integration

3.9.1. Transaction strategy configuration
3.9.2. JNDI-bound SessionFactory
3.9.3. Current Session context management with JTA
3.9.4. JMX deployment

Hibernate被设计成可以在很多种不同的环境下运行,所以它有很多的配置参数。幸运的是,大多数参数都有合理的默认值,并且在Hibernate的发行包中 etc/目录下有个hibernate.properties示例文件。你只需将其拷贝到你的classpath,并自定义其中的参数来适合你的需求。

3.1. Programmatic configuration
一个org.hibernate.cfg.Configuration的类实例代表从应用程序的java类型到数据库SQL类型映射的整个集合。org.hibernate.cfg.Configuration被用来构建不可变的org.hibernate.SessionFactory。映射关系会从所有的映射文件编译而来。
你可以通过直接指定映射文件来获得org.hibernate.cfg.Configuration 的实例。如果映射文件在classpath下,使用addResource(),如下:

Configuration cfg = new Configuration()
    .addResource("Item.hbm.xml")
    .addResource("Bid.hbm.xml");

 
另一种方式是指定被映射的类,让Hibernate来为你找到映射文件:

Configuration cfg = new Configuration()
    .addClass(org.hibernate.auction.Item.class)
    .addClass(org.hibernate.auction.Bid.class);

 
接下来Hibernate就会在classpath下寻找 /org/hibernate/auction/Item.hbm.xml 和 /org/hibernate/auction/Bid.hbm.xml这两个文件。这种方式消除了硬编码文件名。
org.hibernate.cfg.Configuration同样允许你指定配置参数。如下:

Configuration cfg = new Configuration()
    .addClass(org.hibernate.auction.Item.class)
    .addClass(org.hibernate.auction.Bid.class)
    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
    .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
    .setProperty("hibernate.order_updates", "true");

 

 
这并不是向Hibernate传递配置参数的唯一方式,你还可以采用下面的方法:
1.传递一个java.util.Properties 类实例给Configuration.setProperties()方法。
2.在classpath的根目录放置一个名为 hibernate.properties的文件。
3.通过使用java -Dproperty=value.设置系统参数。
4.在 hibernate.cfg.xml文件中包含<property>标签(后面会讨论)


如果你想以最快的速度开始,hibernate.properties 是最简单的方式。 org.hibernate.cfg.Configuration被视为启动期对象,一旦SessionFactory 创建完成,org.hibernate.cfg.Configuration实例就会被抛弃。


3.2. Obtaining a SessionFactory
当所有的映射关系被org.hibernate.cfg.Configuration解析之后,应用程序必须获得一个创建org.hibernate.Session类实例的工厂。这个工厂通常被应用程序的所有线程所共享。

SessionFactory sessions = cfg.buildSessionFactory();

 
Hibernate只允许你的应用程序实例化一个 org.hibernate.SessionFactory.如果你使用多个数据库,这将会很有用。

3.3. JDBC connections

建议让org.hibernate.SessionFactory 来为你创建和管理(pool)JDBC连接。如果你采用这种方式,打开一个org.hibernate.Session就像下面这样简单:

Session session = sessions.openSession(); // open a new Session

 

 
一旦你开始了一项需要访问数据库的任务,你就会从连接池中获得一个JDBC连接。
在你可以做这个之前,你需要传递一些JDBC连接参数到Hibernate。所有的Hibernate属性名称和语义都定义在org.hibernate.cfg.Environment类中。JDBC连接最重要的参数如下表所列:
如果你设置了下面的参数,Hibernate会使用java.sql.DriverManager 来获得和管理(pool)数据库连接。

Table 3.1. Hibernate JDBC Properties

 

 


Hibernate本身的连接池算法非常的初级。是为了帮助你快速开始,而不是为了用于生产环境,甚至是性能测试。为了最好的性能和稳定性,你应该使用第三方连接池。只需用指定其它连接池的参数替换hibernate.connection.pool_size参数。这样就关闭了Hibernate自身的连接池。比如:你可能喜欢使用c3p0。


C3P0是一个开源的JDBC连接池,在Hibernate发行版的lib目录下你可以找到它。如果你设置了hibernate.c3p0.*参数,Hibernate将会使用org.hibernate.connection.C3P0ConnectionProvider进行连接池工作。
如果你喜欢使用Proxool,更多信息请参考打包的hibernate.properties文件和Hibernate网站。设置了c3p0的 hibernate.properties 样例文件如下:

 

hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQL82Dialect

 

For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server javax.sql.Datasource registered in JNDI. You will need to set at least one of the following properties:(以后看)

 

Table 3.2. Hibernate Datasource Properties

 

 


 

Here is an example hibernate.properties file for an application server provided JNDI datasource:

hibernate.connection.datasource = java:/comp/env/jdbc/test
hibernate.transaction.factory_class = \
    org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = \
    org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = org.hibernate.dialect.PostgreSQL82Dialect

  

JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server.

 

Arbitrary connection properties can be given by prepending "hibernate.connection" to the connection property name. For example, you can specify a charSet connection property using hibernate.connection.charSet.

 

You can define your own plugin strategy for obtaining JDBC connections by implementing the interface org.hibernate.connection.ConnectionProvider, and specifying your custom implementation via the hibernate.connection.provider_class property.

 

3.4. Optional configuration properties

还有很多的参数用来控制Hibernate运行时的行为。不过,它们都是可选的,并且都有合理的默认值。

注意:一些属性是"system-level",系统级别的属性只能通过java -Dproperty=value 或者hibernate.properties这两种方式进行设置。

Table 3.3. Hibernate Configuration Properties

注意:我们建议所有使用@GeneratedValue的新项目,也要设置hibernate.id.new_generator_mappings=true。这样新的生成器会更加高效而且更加接近JPA2的语法规范。但是这样的设置并不向后兼容已存在的数据库(如果它使用序列或表来进行ID生成)

Table 3.4. Hibernate JDBC and Connection Properties

Table 3.5. Hibernate Cache Properties

Table 3.6. Hibernate Transaction Properties

Table 3.7. Miscellaneous Properties

 

 

3.4.1. SQL Dialects

总要给hibernate.dialect属性设置正确的值,也就是对应你数据库的org.hibernate.dialect.Dialect类的子类。如果你指定一种方言,Hibernate将会给上面列出来的的属性设置合理的默认值,免去你手动设置。

Table 3.8. Hibernate SQL Dialects (hibernate.dialect)

 

3.4.2. Outer Join Fetching

如果你的数据库支持ANSI, Oracle 或者Sybase形式的外连接,outer join fetching通常可以通过减少与数据库交换数据次数来提高性能。但是,这可能会增大数据库本身的压力。outer join fetching允许在一个SQL SELECT查询中检索出通过many-to-one, one-to-many, many-to-many 和one-to-one关联到一起的整个对象图。

通过设置属性hibernate.max_fetch_depth的值为0,可以在全局禁用Outer join fetching。把值设为1或者更大将对映射为fetch="join"的one-to-one 和 many-to-one关联启用Outer join fetching。

See Section 20.1, “Fetching strategies” for more information.

 

3.4.3. Binary Streams

Oracle限制从它的JDBC驱动输入和输出的byte数组的大小。如果你想要使用binary类型和serializable类型的大体积实例,你应该启用hibernate.jdbc.use_streams_for_binary。这是一个system-level属性。

 

3.4.4. Second-level and query cache

 

See the Section 20.2, “The Second Level Cache” for more information.

 

3.4.5. Query Language Substitution

 

3.4.6. Hibernate statistics

 

3.5. Logging


3.6. Implementing a NamingStrategy


3.7. Implementing a PersisterClassProvider(以后看)


3.8. XML configuration file

另一种配置Hibernate的方式是创建一个名为hibernate.cfg.xml的文件。hibernate.cfg.xml被用来替代hibernate.properties,如果两个文件都创建了,hibernate.cfg.xml会覆盖hibernate.properties的配置。hibernate.cfg.xml应该放在CLASSPATH根目录。下面是文件示例:

 

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <!-- a SessionFactory instance listed as /jndi/name -->
    <session-factory
        name="java:hibernate/SessionFactory">

        <!-- properties -->
        <property name="connection.datasource">java:/comp/env/jdbc/MyDB</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">false</property>
        <property name="transaction.factory_class">
            org.hibernate.transaction.JTATransactionFactory
        </property>
        <property name="jta.UserTransaction">java:comp/UserTransaction</property>

        <!-- mapping files -->
        <mapping resource="org/hibernate/auction/Item.hbm.xml"/>
        <mapping resource="org/hibernate/auction/Bid.hbm.xml"/>

        <!-- cache settings -->
        <class-cache class="org.hibernate.auction.Item" usage="read-write"/>
        <class-cache class="org.hibernate.auction.Bid" usage="read-only"/>
        <collection-cache collection="org.hibernate.auction.Item.bids" usage="read-write"/>

    </session-factory>

</hibernate-configuration>

  这种方式的优点是the externalization of the mapping file names to configuration。一旦你不得不调整Hibernate cache,使用hibernate.cfg.xml 文件会很方便。你可以选择使用hibernate.properties 或者 hibernate.cfg.xml,除了上面提到的XML配置文件的优点,二者是等价的。使用XML配置文件,使用Hibernate就像下面这样简单:

 

SessionFactory sf = new Configuration().configure().buildSessionFactory();

 或者你可以使用一个不同的XML配置文件:

 

SessionFactory sf = new Configuration()
    .configure("catdb.cfg.xml")
    .buildSessionFactory();
 

3.9. Java EE Application Server integration(以后看)

分享到:
评论

相关推荐

    reference manual for hibernate 3.x.rar

    《Hibernate 3.x 参考手册》是Java开发者不可或缺的一份资源,它详细阐述了Hibernate这一流行的ORM(对象关系映射)框架在3.x版本中的使用方法和核心概念。Hibernate作为一个开源的Java库,旨在简化数据库操作,通过...

    安卓Android源码——Hibernate4.zip

    【标题】"安卓Android源码——Hibernate4.zip" 提供的是关于在Android平台上使用Hibernate4框架的源代码示例。Hibernate4是一个流行的Java对象关系映射(ORM)工具,它允许开发者将数据库操作与Java对象模型相结合,...

    提升Hibernate性能的魔方——IronTrack SQL.pdf

    在提到提升Hibernate性能的魔方——IronTrack SQL时,我们必须首先了解IronTrack SQL的背景和功能。IronTrack SQL是基于Apache许可证的开源工具,通过与开源JDBC驱动p6spy合作,提供了一个增强的对基于Hibernate的...

    Beetlsql自学笔记(csdn)————程序.pdf

    3. **快速入门** 在项目中引入BeetlSQL的依赖,例如在Spring Boot项目中,可以添加`beetlsql-starter`、JDBC、MySQL驱动和数据库连接池Druid的相关依赖。创建好数据库表后,即可开始使用BeetlSQL进行数据操作。 ...

    java开发简历范本——有经验.docx

    【Java 开发简历范本——有经验】 在Java开发领域,一份详尽的简历是向潜在雇主展示技术能力和项目经验的重要途径。以下是一份典型的Java开发者简历中的关键知识点: 1. **基础技能**: - **Java编程**:熟练掌握...

    Hibernate3.3_学习笔记.doc.zip

    《Hibernate3.3_学习笔记》是一份详细记录了Hibernate3.3版本特性和使用方法的文档,旨在帮助开发者深入理解和应用这一强大的对象关系映射(ORM)框架。Hibernate是Java开发中的一个明星库,它简化了数据库操作,...

    Hibernate3 学习笔记.ppt

    此外,还需要通过Configuration类配置Hibernate,包括数据库连接信息、映射文件等。 【三、Hibernate映射申明(Mapping declaration)】 Hibernate映射声明通常通过XML文件(*.hbm.xml)或注解实现。XML文件中包含...

    hibernate_reference.pdf

    3. **映射策略**:详细阐述了 Hibernate 中的多种映射策略,例如一对一、一对多、多对多等映射方式,并提供了相应的示例代码。 4. **查询语言**:重点介绍了 Hibernate 查询语言(HQL)的使用方法,以及如何通过 ...

    hibernate-core-5.0.11.Final.jar

    《深入理解Hibernate Core 5.0.11.Final.jar:源码剖析与应用实践》 Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    hibernate-core-5.4.24.Final.jar

    hibernate-core-5.4.24.Final.jar

    hibernate_reference中文版和Hibernate中文手册

    《Hibernate参考指南中文版》与《Hibernate中文手册》是学习Java领域中ORM(对象关系映射)框架Hibernate的重要参考资料。Hibernate作为一个开源的、强大的持久化框架,极大地简化了数据库操作,使得开发人员能够以...

    MLDN学习笔记 —— Annotation

    《MLDN学习笔记——Annotation》这篇博文主要探讨的是在编程领域中,特别是Java语言中,关于Annotation(注解)的深入理解和应用。Annotation是Java语言提供的一种元数据,它为程序提供了额外的信息,这些信息可以被...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    hibernate jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar hibernate-search-4.2.0.Final.jar hibernate-search-...

    Spring学习笔记+学习源码.zip

    3. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring AOP允许开发者定义“切面”——跨越多个类的行为或责任。通过切点(Pointcut)和通知(Advice),可以在不修改原有代码的情况下添加新的功能。 4...

Global site tag (gtag.js) - Google Analytics