表 3.1. Hibernate JDBC属性
属性名 用途
hibernate.connection.driver_class jdbc驱动类
hibernate.connection.url jdbc URL
hibernate.connection.username 数据库用户名
hibernate.connection.password 数据库用户密码
hibernate.connection.pool_size 连接池容量最大数
Hibernate的连接池算法是非常可配置的。它的用途是让你上手,但是并非让你在生产系统中使用的,甚至不是用来做性能测试的。如果为了得到最好的性能和可靠性需要使用第三方的池,请用你连接池特定的设置来取代hibernate.connection.pool_size属性。
C3P0是随Hibernate发行包一起发布的一个开放源代码JDBC连接池,你可以在lib 目录中找到。假若你设置了hibernate.c3p0.* 属性,Hibernate会使用内置的C3P0ConnectionProvider作为连接池。 对Apache DBCP和Proxool的支持也是内置的。你必须设置hibernate.dbcp.*属性 (DBCP连接池属性)来打开DBCPConnectionProvider。如果打开hibernate.dbcp.ps.* (DBCP 语句缓存属性)可以使用Prepared statement缓存(高度推荐)。要知道它们的含义,请查阅Apache commons-pool的文档。如果你想要用Proxool,你需要设置hibernate.proxool.*系列属性。
下面是使用C3P0的一个例子:
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = net.sf.hibernate.dialect.PostgreSQLDialect
在Application Server内使用时,Hibernate可以从JNDI中注册的javax.sql.Datasource取得连接。需要设置如下属性:
表 3.2. Hibernate 数据源(Datasource)属性
属性名 用途
hibernate.connection.datasource datasource JNDI 名字
hibernate.jndi.url JNDI 提供者的URL (可选)
hibernate.jndi.class JNDI InitialContextFactory的类名 (可选)
hibernate.connection.username 数据库用户名 (可选)
hibernate.connection.password 数据库密码 (可选)
下面是一个使用应用服务器提供的JNDI数据源的例子:
hibernate.connection.datasource = java:/comp/env/jdbc/MyDB
hibernate.transaction.factory_class = \
net.sf.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = \
net.sf.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = \
net.sf.hibernate.dialect.PostgreSQLDialect
从JNDI数据源获得的JDBC连接自动具有应用服务器的容器管理事务的特性。
可以通过"hibernate.connnection"开头的属性来设置特别的连接属性。比如,你可以通过hibernate.connnection.charSet来指定charSet。
通过实现net.sf.hibernate.connection.ConnectionProvider接口,你可以定义如何获得JDBC连接的策略。你可以通过设置hibernate.connection.provider_class来选择一个自定义的实现。
3.5. 可选配置属性
下面是一些在运行时可以改变Hibernate行为的其他配置。所有这些都是可选的,也有合理的默认值。
系统级别的配置只能通过java -Dproperty=value或者在hibernate.properties文件中配置,而不能通过传递给Configuration的Properties实例来配置。
表 3.3. Hibernate配置属性
属性名 用途
hibernate.dialect Hibernate方言(Dialect)的类名 - 可以让Hibernate使用某些特定的数据库平台的特性
取值. full.classname.of.Dialect
hibernate.default_schema 在生成的SQL中,scheml/tablespace的全限定名
取值. SCHEMA_NAME
hibernate.session_factory_name 自动把创建的SessionFactory以这个名字绑定到JNDI中去.
取值. jndi/composite/name
hibernate.use_outer_join 允许使用外连接抓取。已经失效。请使用max_fetch_depth。
取值. true | false
hibernate.max_fetch_depth 对单根联合(一对一,多对一),设置外连接抓取树的最大深度。如果是0将关闭默认的外连接抓取。
取值. 建议设置为0到3之间