Hibernate——配置大全

通用配置

  • 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>

posted @ 2020-12-07 19:02  朝明  阅读(613)  评论(0编辑  收藏  举报