- 浏览: 5105 次
- 性别:
- 来自: 长沙
文章分类
最新评论
hibernate比较全面的配制说明
Hibernate JPA自定义配置可以通过多种方式进行配置,如下面列举的几种方法。
方法一:在persistence.xml文件中配置,如下所示。
<persistence>
<persistence-unit name="jpaUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/jpademo" />
<property name="hibernate.connection.username" value="root" />
<property name=" hibernate.show_sql " value="true"/>
</properties>
</persistence-unit>
</persistence>
其中,“hibernate.show_sql ”为可配置的属性,Hibernate JPA还提供很多不同属性的配置。
— 方法二:通过代码,在创建EntityManagerFactory时指定,如下所示。
Map configOverrides = new HashMap();
configOverrides.put("hibernate.format_sql ", true);
EntityManagerFactory programmaticEmf =
Persistence.createEntityManagerFactory("jpaUnit", configOverrides);
当同时使用方法一和方法二设置时,方法二的方式为有效的配置。
— 方法三:使用Hibernate 专有的配置文件来配置,但首先要在persistence.xml文件中配置“hibernate.ejb.cfgfile”指定配置文件的位置,如下所示。
<persistence>
<persistence-unit name="jpaUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/jpademo" />
<property name="hibernate.connection.username" value="root" />
<!—可选,配置Hibernate配置文件-->
< property name="hibernate.ejb.cfgfile"
value="/com/fengmanfei/jpa/hibernate.cfg.xml"/ >
</properties>
</persistence-unit>
</persistence>
其中,“/com /fengmanfei/jpa/hibernate.cfg.xml”为Hibernate配置文件的保存位置。使用这种方式,适用于将现有 Hibernate应用移植到JPA应用中来。但要注意,方法三的优先级最低,如果与方法一和方法二冲突,则方法一或方法二中的配置有效。
14.1.4 基本配置
方法一和方法二是JPA的标准配置,方法三是Hibernate特有的配置。并不是所有的属性都可以通过这三种方式配置,其中一些属性必须通过方法一和方法二来配置,这些属性的详细说明如下所示。
— 属性名:hibernate.ejb.classcache.<classname>
描述:指定缓存实体对象,<classname>为缓存类的全名,值为缓存类型,以逗号分隔。
示例如下:
<property name="hibernate.ejb.classcache. com.fengmanfei.jpa.entity.Customer"
value="read-write"/>
— 属性名:hibernate.ejb.collectioncache.<collectionrole>
描述:指定集合实体类缓存,设置同上。<collectionrole>为集合类的全名,值为缓存类型,以逗号分隔。
示例如下:
<property name="hibernate.ejb.collectioncache.com.fengmanfei.jpa.entity.Customer. orders"
value="read-write , RegionName "/>
★ 提示 ★
读者若想了解更多的缓存设置,请参阅JBoss Cache的相关文档。
— 属性名:hibernate.ejb.cfgfile
描述:指定使用Hibernate配置文件中的配置。
示例如下:
< property name="hibernate.ejb.cfgfile" value="/com/fengmanfei/jpa/hibernate.cfg.xml"/ >
— 属性名:hibernate.archieve.autodetection
描述:创建Entity Manager时搜索文件的类型,多个值之间用逗号分隔。
可选值:
— class:.class类文件。
— hbm:Hibernate 配置文件。
默认两个都搜索。
示例如下:
<property name="hibernate.archive.autodetection" value="class,hbm"/>
— 属性名:hibernate.ejb.interceptor
描述:自定义拦截器类名,拦截器必须实现了org.hibernate.Interceptor接口,并且有无参的构造方法。
示例如下:
<property name=" hibernate.ejb.interceptor "
value="com.fengmanfei.jpa.interceptor.MyInterceptor"/>
— 属性名:hibernate.ejb.naming_strategy
描述:设置注释命名策略。
可选值:
— EJB3NamingStrategy(默认):EJB3规范的命名实现。
— DefaultComponentSafeNamingStrategy:在默认的EJB3NamingStrategy上进行了扩展,允许在同一实体中使用两个同类型的嵌入对象而无须额外的声明。
示例如下:
<property name=" hibernate.ejb.naming_strategy "
value=" DefaultComponentSafeNamingStrategy "/>
— 属性名:hibernate.ejb.event.<eventtype>
描述:配置事件监听器,其中<eventtype>为监听的事件类型,事件类型如表14-1中列举所示。而值则为具体监听器类的全名,如果有多个则使用逗号分隔。自定义拦截器类,拦截器必须实现了org.hibernate.Interceptor接口,并且有无参的构造方法,在JPA的环境中,尽量继承表14-1中的时间监听器类。
表14-1 可选的监听事件类型
事件类型
监听器类
flush
org.hibernate.ejb.event.EJB3FlushEventListener
auto-flush
org.hibernate.ejb.event.EJB3AutoFlushEventListener
delete
org.hibernate.ejb.event.EJB3DeleteEventListener
flush-entity
org.hibernate.ejb.event.EJB3FlushEntityEventListener
merge
org.hibernate.ejb.event.EJB3MergeEventListener
create
org.hibernate.ejb.event.EJB3PersistEventListener
create-onflush
org.hibernate.ejb.event.EJB3PersistOnFlushEventListener
save
org.hibernate.ejb.event.EJB3SaveEventListener
save-update
org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener
续表
事件类型
监听器类
pre-insert
org.hibernate.secure.JACCPreInsertEventListener,org.hibernate.valitator.event.ValidateEventListener
pre-update
org.hibernate.secure.JACCPreUpdateEventListener,org.hibernate.valitator.event.ValidateEventListener
pre-delete
org.hibernate.secure.JACCPreDeleteEventListener
pre-load
org.hibernate.secure.JACCPreLoadEventListener
post-delete
org.hibernate.ejb.event.EJB3PostDeleteEventListener
post-insert
org.hibernate.ejb.event.EJB3PostInsertEventListener
post-load
org.hibernate.ejb.event.EJB3PostLoadEventListener
post-update
org.hibernate.ejb.event.EJB3PostUpdateEventListener
示例如下:
<property name="hibernate.ejb.event.create" value="com.fengmanfei.listener. CreateListener" />
其中,CreateListener继承org.hibernate.ejb.event.EJB3PersistEventListener类,代码如下所示。
package com.fengmanfei.listener;
import org.hibernate.HibernateException;
import org.hibernate.ejb.event.EJB3PersistEventListener;
import org.hibernate.event.PersistEvent;
public class CreateListener extends EJB3PersistEventListener {
// 覆盖父类中的方法
@Override
public void onPersist(PersistEvent event) throws HibernateException {
super.onPersist(event);
//代码处理
}
}
— 属性名:hibernate.ejb.use_class_enhancer
描述:是否启用应用服务器扩展类。
可选值:
— true:启用扩展类。
— false(默认):禁用扩展类。
示例如下:
<property name=" hibernate.ejb.use_class_enhancer " value=" true”/>
— 属性名:hibernate.ejb.discard_pc_on_close
描述:是否在执行clear()时脱离持久化上下文。
可选值:
— true:执行clear()时脱离持久化上下文。
— false(默认):执行clear()时不脱离持久化上下文。
示例如下:
<property name=" hibernate.ejb.discard_pc_on_close " value=" true”/>
14.1.5 配置日志
Hibernate使用Apache commons-logging来为各种事件记录日志。commons-logging将直接将日志输出到Apache Log4j(如果在类路径中包括log4j.jar)或 JDK1.4 logging (如果运行在JDK1.4或以上的环境下)。
如果使用Log4j,需要将log4j.properties文件保存在类路径中。Hibernate根据对日志进行了详细的分类,以便能够控制日志的的输出信息,这些日志类别如表14-2所示。
表14-2 Hibernate JPA实现日志类别
属性名
描 述
org.hibernate.SQL
记录SQL DML语句
org.hibernate.type
记录JDBC参数
org.hibernate.tool.hbm2ddl
记录SQL DDL语句
org.hibernate.pretty
记录提交实体时,相关联的20个实体的状态
org.hibernate.cache
记录所有二级缓存
org.hibernate.transaction
记录事务相关的操作
org.hibernate.jdbc
记录获取JDBC资源的操作
org.hibernate.hql.ast.AST
记录HQL 和SQL AST的查询语句
org.hibernate.secure
记录JAAS认证请求
org.hibernate
记录所有信息,建议在调试开发阶段设置
例如,下面为log4j.properties配置日志的示例代码。
### log4j基本配置 ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=hibernate.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 设置日志级别###
log4j.rootLogger=info, stdout
###输出hibernate调试过程中的错误日志
log4j.logger.org.hibernate=debug
###输出HQL查询调试日志
log4j.logger.org.hibernate.hql.ast.AST=debug
### 输出SQL语句调试日志
log4j.logger.org.hibernate.SQL=debug
### 输出 JDBC参数查询的日志 ###
log4j.logger.org.hibernate.type=info
### 输出缓存日志 ###
log4j.logger.org.hibernate.cache=debug
### 输出事务日志###
log4j.logger.org.hibernate.transaction=debug
###输出获取JDBC资源日志###
log4j.logger.org.hibernate.jdbc=debug
14.1.6 配置缓存
Hibernate除了自动对Session级别的事务进行一级缓存外,二级缓存的优化是Hibernate实现的一个亮点之一,有关二级缓存的属性如下所示。
— 属性名:hibernate.cache.provider_class
描述:二级缓存实现的类全名,所使用的缓存都需要实现org.hibernate.cache. CacheProvider接口,Hibernate已经实现了一些缓存,开发人员可以直接配置使用,同时要启用二级缓存,配置 hibernate.cache.use_second_level_cache为true。
可选值:
org.hibernate.cache.HashtableCacheProvide、org.hibernate.cache.EhCacheProvider、org.hibernate.
cache.OSCacheProvider、org.hibernate.cache.SwarmCacheProvider和org.hibernate. cache.Tree CacheProvider等。
示例如下:
<property name=" hibernate.cache.provider_class "
value=" org.hibernate.cache.HashtableCacheProvide "/>
★ 提示 ★
有关各种缓存实现的详细区别,读者可以参阅Hiberante Core的相关文档。
— 属性名:hibernate.cache.use_minimal_puts
描述:是否优化二级缓存来最小化读写操作,集群时的缓存优化。
可选值:
— true(默认):启用最小化读写操作。
— false:禁用最小化读写操作。
示例如下:
<property name=" hibernate.cache.use_minimal_puts " value=" false”/>
— 属性名:hibernate.cache.use_query_cache
描述:是否缓存查询结果。
可选值:
— true:缓存查询结果。
— false:不缓存查询结果。
示例如下:
<property name=" hibernate.cache.use_query_cache " value=" true”/>
— 属性名:hibernate.cache.use_second_level_cache
描述:是否启用二级缓存。
可选值:
— true:启用二级缓存。
— false:不使用二级缓存。
示例如下:
<property name=" hibernate.cache.use_second_level_cache " value=" true”/>
— 属性名:hibernate.cache.query_cache_factory
描述:设置自定义的查询缓存类全名,缓存类必须实现org.hibernate.cache.QueryCache接口。
可选值:
— org.hibernate.cache.StandardQueryCache(默认)。
— 自定义缓存实现类。
示例如下:
<property name=" hibernate.cache.query_cache_factory "
value=" com.fengmanfei.cache.MyCache”/>
— 属性名:hibernate.cache.region_prefix
描述:二级缓存的前缀名称。
示例如下:
<property name=" hibernate.cache.region_prefix " value=" jpa”/>
— 属性名:hibernate.cache.use_structured_entries
描述:是否使用结构化的方式缓存对象。
可选值:
— true:结构化方式缓存对象。
— false:不使用结构化的方式缓存对象。
示例如下:
<property name=" hibernate.cache.use_structured_entries " value=" true”/>
14.1.7 配置JDBC和数据库
Hibernate自定义JDBC和数据库配置属性如下所示。
— 属性名:hibernate.jdbc.fetch_size
描述:JDBC抓取记录的大小,相当于设置Statement.setFetchSize(),默认值为25。
示例如下:
<property name="hibernate.jdbc.fetch_size" value="50”/>
— 属性名:hibernate.jdbc.batch_size
描述:JDBC2批量更新的大小,建议设置为5~30之间的值,默认为5。
示例如下:
<property name="hibernate.jdbc.batch_size" value=" 25”/>
— 属性名:hibernate.jdbc.batch_versioned_data
描述:JDBC执行批量操作时,是否同时更新版本数据。
可选值:
— true(默认):执行批量操作executeBatch()返回成功的记录数,并且更新版本数据。
— false:批量操作后不更新版本数据。
示例如下:
<property name="hibernate.jdbc.batch_versioned_data" value="false”/>
— 属性名:hibernate.jdbc.batch_versioned_data
描述:JDBC执行批量操作时,是否同时更新版本数据。
可选值:
— true(默认):执行批量操作executeBatch()返回成功的记录数,并且更新版本数据。
— false:批量操作后不更新版本数据。
示例如下:
<property name="hibernate.jdbc.batch_versioned_data" value="false”/>
— 属性名:hibernate.jdbc.use_scrollable_resultset
描述:是否允许Hibernate使用JDBC2的可滚动结果集。
可选值:
— true(默认):可使用可滚动结果集,只有在使用用户提供的JDBC连接时,才需要设置为启用。
— false:不可使用滚动结果集。
示例如下:
<property name="hibernate.jdbc.use_scrollable_resultset" value="false”/>
— 属性名:hibernate.jdbc.use_streams_for_binary
描述:是否JDBC以二进制方式读取。
可选值:
— true(默认):以二进制方式读取。
— false:以二进制方式读取,而以序列化方式读取。
示例如下:
<property name="hibernate.jdbc.use_streams_for_binary" value="false”/>
— 属性名:hibernate.jdbc.use_get_generated_keys
描述:是否使用JDBC3插入记录时使用PreparedStatement.getGeneratedKeys()生成主键。
可选值:
— true:使用PreparedStatement.getGeneratedKeys()生成主键。
— false(默认):使用Hibernate自定义的生成策略。
示例如下:
<property name="hibernate.jdbc.use_get_generated_keys" value="true”/>
— 属性名:hibernate.connection.isolation
描述:JDBC事务隔离级别,请读者查阅java.sql.Connection文档了解各个级别的类型,例如1、2、4(默认)、8。
示例如下:
<property name="hibernate.connection.isolation" value="8”/>
— 属性名:hibernate.connection.autocommit
描述:是否使用JDBC自动提交。
可选值:
— true(默认):自动提交。
— false:不自动提交。
示例如下:
<property name="hibernate.connection.autocommit" value="false”/>
— 属性名:hibernate.connection.driver_class
描述:数据连接的驱动类的全称,不同的数据库实现类不同。
示例如下:
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver”/>
— 属性名:hibernate.connection.url
描述:数据连接的URL。
示例如下:
<property name="hibernate.connection.url" value=" jdbc:mysql://localhost:3306/ jpademo”/>
— 属性名:hibernate.connection.username
描述:数据连接的用户名。
示例如下:
<property name="hibernate.connection.username " value="root”/>
— 属性名:hibernate.connection.password
描述:数据连接的密码。
示例如下:
<property name="hibernate.connection.password " value="123”/>
— 属性名:hibernate.dialect
描述:指定不同的数据库,Hibernate底层会根据不同的数据库生成的SQL进行优化,取值如表14-3所示。
表14-3 Hibernate JPA实现不同数据库相关配置的属性
属性名
描 述
DB2
org.hibernate.dialect.DB2Dialect
DB2 AS/400
org.hibernate.dialect.DB2400Dialect
DB2 OS390
org.hibernate.dialect.DB2390Dialect
PostgreSQL
org.hibernate.dialect.PostgreSQLDialect
MySQL
org.hibernate.dialect.MySQLDialect
MySQL InnoDB
org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM
org.hibernate.dialect.MySQLMyISAMDialect
Oracle
org.hibernate.dialect.OracleDialect
Oracle 9i/10g
org.hibernate.dialect.Oracle9Dialect
Sybase
org.hibernate.dialect.SybaseDialect
Sybase Anywhere
org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server
org.hibernate.dialect.SQLServerDialect
SAP DB
org.hibernate.dialect.SAPDBDialect
Informix
org.hibernate.dialect.InformixDialect
HypersonicSQL
org.hibernate.dialect.HSQLDialect
续表
属性名
描 述
Ingres
org.hibernate.dialect.IngresDialect
Progress
org.hibernate.dialect.ProgressDialect
Mckoi SQL
org.hibernate.dialect.MckoiDialect
Interbase
org.hibernate.dialect.InterbaseDialect
Pointbase
org.hibernate.dialect.PointbaseDialect
示例如下:
<property name=" hibernate.dialect " value="org.hibernate.dialect.MySQLDialect”/>
14.1.8 其他的常用配置
除了前面几节列举的配置外,Hibernate的JPA实现还有一些常用的配置,如下所示。
— 属性名:hibernate.show_sql
描述:是否输出SQL语句。
可选值:
— true(默认):输出SQL,相当于日志中设置org.hibernate.SQL的类别值为debug。
— false:不输出SQL。
示例如下:
<property name="hibernate.show_sql" value="false”/>
— 属性名:hibernate.format_sql
描述:是否格式化输出SQL语句。
可选值:
— true(默认):格式化输出SQL。
— false:不格式化输出SQL。
示例如下:
<property name="hibernate.format_sql " value="false”/>
— 属性名:hibernate.use_sql_comments
描述:是否输出SQL注释。
可选值:
— true(默认):输出SQL注释,有助于调试。
— false:不输出SQL注释。
示例如下:
<property name="hibernate.use_sql_comments" value="false”/>
— 属性名:hibernate.generate_statistics
描述:是否收集与运行性能有关的参数。
可选值:
— true(默认):收集与运行性能有关的参数。
— false:不收集与运行性能有关的参数。
示例如下:
<property name="hibernate.generate_statistics" value="false"/>
— 属性名:hibernate.hbm2ddl.auto
描述:对DDL的自动生成方式。
可选值:
— create-drop:删除后重新创建。
— create:只创建新的。
— update:更新。
— validate:只进行验证。
示例如下:
<property name=" hibernate.hbm2ddl.auto " value="create-drop"/>
— 属性名:hibernate.default_schema
描述:生成的SQL默认的schema名称。
示例如下:
<property name="hibernate.default_schema" value="test"/>
— 属性名:hibernate.default_catalog
描述:生成的SQL默认的catalog名称。
示例如下:
<property name="hibernate.default_catalog" value="test"/>
— 属性名:hibernate.max_fetch_depth
描述:一对一和多对一映射时,实体加载的最大深度,0表示不抓取相关实体。建议值在0~3之间,默认为1。
示例如下:
<property name="hibernate.max_fetch_depth" value="2"/>
— 属性名:hibernate.default_batch_fetch_size
描述:加载相关联的实体集合时,所加载的相关实体个数。建议使用2的倍数值,例如4、8(默认)、16。
示例如下:
<property name="hibernate.default_batch_fetch_size" value="16"/>
大多数情况下,Hibernate JPA中使用默认的设置就能基本满足需求,但当需求变化时,需要进行一些特殊的优化时,就可以通过自定义的一些属性来实现目标。
相关推荐
首先,Hibernate是一个全面的对象关系映射框架,它简化了Java应用程序与数据库之间的交互。通过Hibernate,开发者可以用面向对象的方式处理数据,而无需直接编写SQL语句。Hibernate的核心组件包括Configuration对象...
Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...
总结,Hibernate 全面涵盖了对象关系映射、配置管理、数据库连接池、事务处理、持久化上下文和缓存机制等多个方面,是 Java 开发者处理数据库操作的强大工具。理解和掌握这些知识点,对于提升 Java 应用程序的开发...
**Hibernate 框架全面解析** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,将数据库操作转换为对Java对象的操作,从而简化了开发过程。这个CHM文档集合包含了丰富的...
此压缩包“Hibernate01_源代码及重要说明”包含了Hibernate的源代码,以及相关的重要说明,旨在帮助开发者深入理解其工作原理。 **一、Hibernate 框架概述** 1. **对象关系映射(ORM)**: ORM是Hibernate的核心,...
在这个“hibernate说明及demo的例子”中,我们将深入探讨Hibernate的核心概念和功能,并通过一个实际的示例来展示如何使用它。 一、Hibernate概述 Hibernate是一个强大的工具,它消除了JDBC代码的繁琐,提供了数据...
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate...
Spring是Java开发中的核心框架,提供了一个全面的应用程序开发模型,包括依赖注入、面向切面编程(AOP)、事务管理等。Spring的事务管理模块支持编程式和声明式事务管理,可以与JTA配合,为分布式事务提供支持。此外...
北京动力节点教育培训公司提供的Hibernate5讲义,不仅对Hibernate框架进行了全面的介绍,而且通过实例演示了如何使用Hibernate进行基本的数据库操作。该讲义涵盖了Hibernate的基本技术、配置方法以及如何开发一个...
【标题】:“学习hibernate必看ppt--总结的很全面” 这个标题表明这是一个关于Hibernate框架的综合学习资料,特别适合初学者或者需要深入理解Hibernate的开发者。它可能包含了一系列PPT,旨在全面概述Hibernate的...
以下是对Hibernate的一些关键知识点的详细说明: 1. **异常处理**: 在描述中提到的`org.hibernate.PropertyValueException: not-null property references a null or transient value`是Hibernate抛出的一个常见...
"Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...
以上只是压缩包中部分可能包含的知识点,实际学习资料可能包括教程文档、示例代码、实战项目等,通过深入学习和实践,开发者可以全面掌握Hibernate的精髓,并将其应用到实际开发中,提高开发效率,降低维护成本。...
- **支持 Java 8**: 全面支持 Java 8 的 Lambda 表达式和 Stream API,使得开发过程更加简洁高效。 - **NoSQL 支持**: 增加了对 NoSQL 数据库的支持,如 MongoDB,为大数据处理提供了一种新的选择。 - **查询语言**:...
《Hibernate-Extensions全面指南》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。然而,为了满足更复杂的业务需求,Hibernate还提供了丰富的扩展功能,这就是我们今天要...
3. **Hibernate 中文API文档.chm**:这是Hibernate的中文API参考手册,对每个类、接口和方法的详细说明,对于查阅具体功能和方法的使用非常有帮助。 4. **Hibernate3.2.chm**:这个文件可能包含了Hibernate 3.2版本...
Hibernate配置文件说明 创建hibernate.cfg.xml
2) 数据O/R mapping 配置文件,也就是数据库中每一条记录的详细说明,包括field, PrimaryKey等。*.hbm.xml,*一般用映射到该类记录的Class的名称表示。 ------------------------ ...