Hibernate——配置

通用配置


· hibernate.dialect

方言。Hibernate会根据配置所指定的关系型数据库方言,生成合适的SQL语句。Hibernate内置的方言类在org.hibernate.dialect包下。

取值如:org.hibernate.dialect.MySQL5Dialectorg.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事务自动提交。取值:truefalse(默认)。


· 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)用于AUTOTABLESEQUENCE这几个主键生成策略上。

取值: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(默认值)、jpalegacy-jpalegacy-hbmcomponent-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关联的批量抓取设置默认数量。取值:4816




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

能用来完全禁止使用二级缓存。对那些在类的映射定义中指定<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>

转自:https://blog.csdn.net/mrkohaku/article/details/79224532

猜你喜欢

转载自blog.csdn.net/lebron3v/article/details/80527670