hibernate.dialect
方言。Hibernate会根据配置所指定的关系型数据库方言,生成合适的SQL语句。Hibernate内置的方言类在org.hibernate.dialect包下。
取值如:org.hibernate.dialect.MySQL5Dialect、org.hibernate.dialect.PostgreSQL94Dialect等等。
hibernate.current_session_context_class
指定通过getCurrentSession()创建的session(当前会话)的范围(上下文)。
由于对不同类型的应用程序而言,“上下文”的定义通是不一样的,不同的上下文对“当前”这个概念定义了不同的范围。所以这里通过配置来对这个范围下定义。
jta:默认的,根据JTA来跟踪和界定。
thread:根据当前线程来跟踪和界定。
managed:根据某些外部实体(如某种形式的拦截器)来跟踪和界定。
其它任何实现了org.hibernate.context.spi.CurrentSessionContext的类的全类名。
Hibernate与Spring整合时:org.springframework.orm.hibernate5.SpringSessionContext(默认的)。
数据库连接属性
hibernate.connection.driver_class
JDBC驱动的全类名。取值如:com.mysql.jdbc.Driver
hibernate.connection.url
JDBC连接URL。
hibernate.connection.username
JDBC连接用户名。
hibernate.connection.password
JDBC连接密码。
hibernate.connection.isolation
JDBC事务隔离级别。每一种隔离级别都对应一个整数。
1:未提交读(Read Uncommitted),一个事务可以读到另外一个事务未提交的数据。
2:提交读(Read Committed),事务没有提交前,所做的任何修改对其他事务是不可见的。
4:可重复读(Repeatable Read),一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但不可以访问成功修改的数据。
8:序列化(Serializable),严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。
hibernate.connection.autocommit
JDBC事务自动提交。取值:true、false(默认)。
hibernate.connection.datasource
hibernate.connection
为JDBC连接属性命名一个前缀。这些属性会传递到驱动的getConnection()方法中去。
hibernate.connection.provider_class
一个向Hibernate提供连接的类的全类名。取值如:org.hibernate.hikaricp.internal.HikariCPConnectionProvider。
hibernate.jndi.class
JNDI的javax.naming.InitialContext类。
hibernate.jndi.url
JNDI连接提供者或URL。
hibernate.connection.acquisition_mode
显式指定Hiebernate从数据源中抓取连接的方式。
immediate/immediately:不区分大小写,IMMEDIATELY模式,即当Session开启就马上抓取连接,这同时会影响释放连接的行为,Session关闭时,才释放连接。
取其它值时:AS_NEEDED模式,只有当需要时才抓取连接。
hibernate.connection.release_mode
显式指定Hiebernate释放连接的方式。与hibernate.connection.acquisition_mode互斥,两者之中只能设置其中之一。
auto:默认的,由Hibernate自动设置。
after_statement:在每个SQL语句执行完成后马上释放连接。此模式下,程序必须显式关闭结果集的迭代器。此模式仅JTA数据源可用。
after_transaction:在事务结束后释放连接。此模式可能不适用于JTA数据源。此模式为Hibernate3.1之后的版本的默认值。
on_close:在Session被关闭后释放连接。此模式为Hibernate2.0~3.1(不含)版本的默认值。
hibernate.connection.initial_pool_size
指定Hibernate内置连接池的最小连接数,默认值为1。
hibernate.connection.pool_size
指定Hibernate内置连接池的最大连接数,默认值为20。
hibernate.connection.pool_validation_interval
指定Hibernate连接池两次连续校验之间的秒数,默认值为30。
hibernate.c3p0.min_size
指定C3P0连接池的最小连接数,默认引用C3P0的最小连接数设置。
hibernate.c3p0.max_size
指定C3P0连接池的最大连接数,默认引用C3P0的最大连接数设置。
hibernate.c3p0.timeout
指定C3P0连接池连接的最大空闲时间,默认引用C3P0的最大空闲时间设置。
hibernate.c3p0.max_statements
指定C3P0连接池连接Statement的最大缓存数,默认引用C3P0的最大缓存设置。
hibernate.c3p0.acquire_increment
指定当程序抓取连接,但没有可用连接时,C3P0连接池增加的连接数,默认引用C3PO的设置。
hibernate.c3p0.idle_test_period
指定C3PO连接池连续两次校验之间的空闲秒数,默认引用C3PO的设置。
hibernate.default_catalog
指定数据库的Catalog的名称。
hibernate.default_schema
指定数据库的Schema的名称。
hibernate.schema_name_resolver
指定Hibernate使用的Schema名称解析器。默认值是org.hibernate.dialect.Dialect,你还可以设置为任何实现了org.hibernate.engine.jdbc.env.spi.SchemaNameResolver这个接口的类的全类名,以使用自定义的解析器。
hibernate.id.new_generator_mappings
设置是否将新的主键生成器(IdentifierGenerator)用于AUTO、TABLE、SEQUENCE这几个主键生成策略上。
取值:true(默认)、·false。
如果你的程序是从Hibernate3.x或4.x升级到Hibernate5.x的,请将这个选项设置为false。
hibernate.use_identifier_rollback
设置是否在删除对象后回滚主键标识。如果开启了,当在数据表中删除了一个对象后,这个对象的主键标识会被回收,下次插入数据时仍可使用这个标识值。
取值:true、·false(默认)。
hibernate.id.optimizer.pooled.preferred
指定Hibernate使用的主键生成优化器。
none:不使用优化器,每次主键生成都访问数据库。
hilo:使用hilo算法生成主键,数据库中的值是bucket的序号。
legacy-hilo:使用旧的hilo算法。
pooled:默认值。使用hilo算法,但bucket内部数值保存在数据库中。
pooled-lo:与pooled的原理相同,但保存在数据库中的值与pooled不同
pooled-lotl:与pooled-lo原理相同,同时使用threadLocal作为缓存。
其它任何实现了Optimizer接口的类的全类名:使用自定义的优化器。
hibernate.globally_quoted_identifiers
是否为所有的数据库标识符(如表名、字段名等)加上引号。
取值:true、·false(默认)。
hibernate.globally_quoted_identifiers_skip_column_definitions
是否不为columnDefinition的内容加上引号
取值:true、·false(默认)。
注意这里有bug:在5.2.11版本之前,设置为false才是不加引号,这个问题在5.2.11版本里修复了。
hibernate.auto_quote_keyword
当用户使用到数据库保留字时,是否自动加上引号。
取值:true、·false(默认)。
hibernate.implicit_naming_strategy
指定隐式命名策略。
取值:default(默认值)、jpa、legacy-jpa、legacy-hbm、component-path、或其它实现了ImplicitNamingStrategy接口的类的全类名。
hibernate.physical_naming_strategy
指定物理命名策略。
取值:org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl(默认值)、或其它实现了PhysicalNamingStrategy接口的类的全类名。
批量操作属性
hibernate.jdbc.batch_size
设置批量操作时每批次的大小。Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。
hibernate.jdbc.fetch_size
设置查询操作时每次读取的结果条数。Fetch Size设的越大,读数据库的次数越少,速度越快,但也更消耗内存。
hibernate.max_fetch_depth
为单向关联(一对一, 多对一)的外连接抓取树设置查询时的最大抓取深度。取值0~3,默认值为0。
hibernate.default_batch_fetch_size
为Hibernate关联的批量抓取设置默认数量。取值:4、8、16。
SQL日志属性
hibernate.show_sql
将SQL语句打印在控制台。
取值:true、·false(默认)。
hibernate.format_sql
将打印的SQL语句格式化。
取值:true、·false(默认)。
hibernate.use_sql_comments
为SQL语句添加有用的注释。
取值:true、·false(默认)。
hibernate.cache.provider_class
指定二级缓存提供者的全类名。
hibernate.cache.use_minimal_puts
以频繁的读操作为代价, 优化二级缓存来最小化写操作。这个设置对的集群缓存非常有用, 对集群缓存的实现而言,默认是开启的。
取值:true(默认)、·false。
hibernate.cache.use_query_cache
允许查询缓存, 个别查询仍然需要被设置为可缓存的。
取值:true、·false(默认)。
hibernate.cache.use_second_level_cache
能用来完全禁止使用二级缓存。对那些在类的映射定义中指定
的类,会默认开启二级缓存。
取值:true(默认)、·false。
hibernate.cache.query_cache_factory
指定缓存工厂。取值:实现了QueryCache接口的类的全类名,默认值为内建的StandardQueryCache。
hibernate.cache.region_prefix
指定二级缓存区域名的前缀。
hibernate.cache.use_structured_entries
强制Hibernate以更人性化的格式将数据存入二级缓存。
取值:true、·false(默认)。
hibernate.transaction.factory_class
指定一个事务工厂。取值为实现了TransactionFactory接口的类的全类名。
hibernate.transaction.flush_before_completion
如果开启,session在事务完成后将被自动冲刷(flush)。现在更好的方法是使用自动session上下文管理。
取值:true、·false(默认)。
hibernate.transaction.auto_close_session
如果开启,session在事务完成后将被自动关闭。现在更好的方法是使用自动session上下文管理。
取值:true、·false(默认)。
Schema的自动生成
hibernate.hbm2ddl.auto
自动执行DDL语句的设置。
none:不执行任何操作
create-only:Hibernate启动时创建表。
drop:Hibernate关闭时删除表。
create:Hibernate每次启动都重新创建表,但关闭时不删除表。
create-drop:Hibernate每次启动都重新创建表,关闭时删除表。
validate:检查映射文件同数据库表时否正确映射,不正确时报错。
update:使用原有的数据库表。
hibernate.cfg.xml简单样例
<?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>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/db1</property>
<property name="connection.username">*****</property>
<property name="connection.password">*****</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.hbm2ddl.auto">validate</property>
</session-factory>
</hibernate-configuration>