hibernate.jdbc.fetch_size 一个非零值,用来决定JDBC的获取量大小。(会调用Statement.setFetchSize()).
hibernate.jdbc.batch_size 一个非零值,会开启Hibernate使用JDBC2的批量更新功能
取值. 建议值在 5 和 30之间。
hibernate.jdbc.use_scrollable_resultset 允许Hibernate使用JDBC2提供的可滚动结果集。只有在使用用户自行提供的JDBC连接时,这个参数才是必需的。否则Hibernate会使用连接的元数据(metadata)。
取值. true | false
hibernate.jdbc.use_streams_for_binary 在从JDBC读写binary(二进制)或者serializable(可序列化)类型时,是否使用stream(流). (这是一个系统级别的属性。)
取值. true | false
hibernate.jdbc.use_get_generated_keys 允许使用JDBC3的PreparedStatement.getGeneratedKeys()在插入后获取数据库自身生成的key。需要JDBC3以上的驱动和JRE1.4以上,如果你的驱动和Hibernate关键字生成器一起使用有问题,请设为false。默认情况下,会用connection元数据根据驱动是否支持自动判断。
取值. true|false
hibernate.cglib.use_reflection_optimizer 是否使用CGLIB来代替运行时反射操作。(系统级别属性,默认为在可能时都使用CGLIB).在调试的时候有时候使用反射会有用。
取值. true | false
hibernate.jndi.<propertyName> 把propertyName这个属性传递到JNDI InitialContextFactory去 (可选)
hibernate.connection.isolation 事务隔离级别 (可选).请检查
java.sql.Connection来得到取值的具体意义。注意大多数数据库不会支持所有的隔离级别。
取值. 1, 2, 4, 8
hibernate.connection.<propertyName> 把 propertyName这个JDBC 属性传递到DriverManager.getConnection()去
hibernate.connection.provider_class 指定一个自定义的ConnectionProvider类名
取值. classname.of.ConnectionProvider
hibernate.cache.provider_class 指定一个自定义的CacheProvider缓存提供者的类名
取值. classname.of.CacheProvider
hibernate.cache.use_minimal_puts 优化第二级缓存操作,减少写操作,代价是读操作更频繁(对于集群缓存很有用)
取值. true|false
hibernate.cache.use_query_cache 打开查询缓存,每个查询仍然必须指明cacheable。
取值. true|false
hibernate.cache.region_prefix 用于第二级缓存区域名字的前缀
取值. prefix
hibernate.transaction.factory_class 指定一个自定义的TransactionFactory类名,Hibernate Transaction API将会使用(默认是JDBCTransactionFactory)。
取值. classname.of.TransactionFactory
jta.UserTransaction JTATransactionFactory 用来从应用服务器获取JTA UserTransaction的JNDI名
取值. jndi/composite/name
hibernate.transaction.manager_lookup_class TransactionManagerLookup的类名 - 当在JTA环境中,JVM级别的缓存被打开的时候使用.
取值. classname.of.TransactionManagerLookup
hibernate.query.substitutions 把Hibernate查询中的一些短语替换为SQL短语(比如说短语可能是函数或者字符)。
取值. hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC
hibernate.show_sql 把所有的SQL语句都输出到控制台
取值. true | false
hibernate.hbm2ddl.auto 在SessionFactory创建后,自动输出schema创建DDL语句到数据库.和create-drop同时使用的话,数据库schema会在SessionFactory显式关闭后被drop掉。
取值. update | create | create-drop
3.5.1. SQL Dialects SQL 方言
你总是可以为你的数据库设置一个hibernate.dialect方言,它是net.sf.hibernate.dialect.Dialect 的一个子类。如果你不需要使用基于native或者sequence的主键自动生成算法,或者悲观锁定(使用Session.lock() 或 Query.setLockMode())的话,方言就可以不必指定。然而,假若你指定了一个方言,Hibernate会为上面列出的一些属性使用特殊默认值,省得你手工指定它们。
表 3.4. Hibernate SQL 方言 (hibernate.dialect)
RDBMS 方言
DB2 net.sf.hibernate.dialect.DB2Dialect
DB2 AS/400 net.sf.hibernate.dialect.DB2400Dialect
DB2 OS390 net.sf.hibernate.dialect.DB2390Dialect
PostgreSQL net.sf.hibernate.dialect.PostgreSQLDialect
MySQL net.sf.hibernate.dialect.MySQLDialect
Oracle (any version) net.sf.hibernate.dialect.OracleDialect
Oracle 9 net.sf.hibernate.dialect.Oracle9Dialect
Sybase net.sf.hibernate.dialect.SybaseDialect
Sybase Anywhere net.sf.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server net.sf.hibernate.dialect.SQLServerDialect
SAP DB net.sf.hibernate.dialect.SAPDBDialect
Informix net.sf.hibernate.dialect.InformixDialect
HypersonicSQL net.sf.hibernate.dialect.HSQLDialect
Ingres net.sf.hibernate.dialect.IngresDialect
Progress net.sf.hibernate.dialect.ProgressDialect
Mckoi SQL net.sf.hibernate.dialect.MckoiDialect
Interbase net.sf.hibernate.dialect.InterbaseDialect
Pointbase net.sf.hibernate.dialect.PointbaseDialect
FrontBase net.sf.hibernate.dialect.FrontbaseDialect
Firebird net.sf.hibernate.dialect.FirebirdDialect
3.5.2. 外连接抓取(Outer Join Fetching )
如果你的数据库支持ANSI或者Oracle风格的外连接,外连接抓取可能提高性能,因为可以限制和数据库交互的数量(代价是数据库自身进行了更多的工作)。外连接抓取允许你在一个select语句中就可以得到一个由多对一或者一对一连接构成的对象图。
默认情况下,抓取在叶对象,拥有代理的对象或者产生对自身的引用时终止。
对一个特定关联来说,通过在XML映射文件中设置outer-join属性可以控制是否开启抓取功能。
也可以设置hibernate.max_fetch_depth为0来全局关闭此功能。如果设置为1或更高的数值,对所有的一对一和多对一关联会打开外连接抓取。默认情况下,它被设置为auto,即自动外连接。但是,一对多关联和集合永远不会使用外连接抓取,除非对每个特定的关联进行明确声明。这一行为可以在运行时通过Hibernate 查询重载。
3.5.3. 二进制流
Oracle限制通过它的JDBC驱动传递的byte数组的大小。如果你希望使用很大数量的binary或者serializable 类型的话,你需要打开hibernate.jdbc.use_streams_for_binary。这只能通过JVM级别设定
3.5.4. 自定义CacheProvider
通过实现net.sf.hibernate.cache.CacheProvider接口,你可以整合一个JVM级别(或者集群的)第二级缓存进来。你可以通过hibernate.cache.provider_class选择某个自定义的实现。