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