spring sessionFactory 属性配置详解,applicationContext中各种属性详解
1.Bean的id为sessionFactory,对应的类为AnnotationSessionFactory,即采用注解的形式实现hibernate。
2.hibernateProperties,配置hibernate的属性
1)hibernate.dialect,配置Hibernate方言,可以让Hibernate使用某些特定的数据库平台的特性,具体的dialect大全:
结下不同数据库的该属性的值如下表。其中属性值得格式:{hibernatejar的全名}.dialaect.{对应数据库}Dialect
HibernateSQL 方言 (hibernate.dialect)
RDBMS |
方言 |
DB2 |
org.hibernate.dialect.DB2Dialect |
DB2 AS/400 |
org.hibernate.dialect.DB2400Dialect |
DB2 OS390 |
org.hibernate.dialect.DB2390Dialect |
PostgreSQL |
org.hibernate.dialect.PostgreSQLDialect |
MySQL |
org.hibernate.dialect.MySQLDialect |
Oracle (any version) |
org.hibernate.dialect.OracleDialect |
Oracle 9 |
org.hibernate.dialect.Oracle9Dialect |
Sybase |
org.hibernate.dialect.SybaseDialect |
Sybase Anywhere |
org.hibernate.dialect.SybaseAnywhereDialect |
Microsoft SQL Server |
org.hibernate.dialect.SQLServerDialect |
SAP DB |
org.hibernate.dialect.SAPDBDialect |
Informix |
org.hibernate.dialect.InformixDialect |
HypersonicSQL |
org.hibernate.dialect.HSQLDialect |
Ingres |
org.hibernate.dialect.IngresDialect |
Progress |
org.hibernate.dialect.ProgressDialect |
Mckoi SQL |
org.hibernate.dialect.MckoiDialect |
Interbase |
org.hibernate.dialect.InterbaseDialect |
Pointbase |
org.hibernate.dialect.PointbaseDialect |
FrontBase |
org.hibernate.dialect.FrontbaseDialect |
Firebird |
org.hibernate.dialect.FirebirdDialect
|
2)hibernate.query.substitutions,查询语言替换,Hibernate查询中的一些短语替换为SQL短语。取值true=1,false=0,toLowercase=LOWER表示在生成SQL语句时,将true替换成1,false替换成0,toLowercase替换成LOWER
3)hibernate.show_sql=true,将执行得到SQL语句都输出到控制台,便于程序员观察SQL的执行。
4)hibernate.hbm2ddl.auto=none,表示不会根据hibernate配置对数据库自动执行任何操作。其他的属性值如下:
create:表示sessionFactory启动的时候先drop掉表,再create,数据库的表数据会丢失。
create-drop:也表示创建,只不过在sessionFactory关闭前执行一下drop。
update:sessionFactory启动的时候会去检查schema是否一致,如果不一致会做scheme更新,是最常用的属性。根据 hibernate持久化类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行hibernate持久化类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行
validate:启动时验证现有数据库表schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
另外,Hibernate配置属性大全:
hibernate.connection.autocommit 允许被缓存的JDBC 连接开启自动提交 (autocommit) ( 不建议 ). 取值 true | false
hibernate.connection.release_mode 指定Hibernate 在何时释放 JDBC 连接 . 默认情况下 , 直到 Session 被显式关闭或被断开连接时 , 才会释放 JDBC 连接 . 对于应用程序服务器的 JTA 数据源 , 你应当使用 after_statement, 这样在每次JDBC 调用后,都会主动的释放连接 . 对于非 JTA 的连接 , 使用 after_transaction 在每个事务结束时释放连接是合理的 . auto 将为 JTA 和 CMT 事务策略选择 after_statement, 为 JDBC 事务策略选择 after_transaction. 取值 on_close | after_transaction | after_statement | auto
hibernate.cache.provider_class 自定义的CacheProvider 的类名 . 取值 classname.of.CacheProvider
hibernate.cache.use_minimal_puts 以频繁的读操作为代价, 优化二级缓存来最小化写操作 . 在 Hibernate3 中,这个设置对的集群缓存非常有用 , 对集群缓存的实现而言,默认是开启的 . 取值 true|false
hibernate.cache.use_query_cache 允许查询缓存, 个别查询仍然需要被设置为可缓存的 . 取值 true|false
hibernate.cache.use_second_level_cache 能用来完全禁止使用二级缓存. 对那些在类的映射定义中指定的类,会默认开启二级缓存 . 取值 true|false
hibernate.cache.query_cache_factory 自定义实现QueryCache 接口的类名 , 默认为内建的 StandardQueryCache. 取值 classname.of.QueryCache
hibernate.cache.region_prefix 二级缓存区域名的前缀. 取值 prefix
hibernate.cache.use_structured_entries 强制Hibernate 以更人性化的格式将数据存入二级缓存 . 取值 true|false
hibernate.transaction.factory_class 一个TransactionFactory 的类名 , 用于 Hibernate Transaction API ( 默认为JDBCTransactionFactory). 取值 classname.of.TransactionFactory
jta.UserTransaction 一个JNDI 名字,被 JTATransactionFactory 用来从应用服务器获取 JTA UserTransaction. 取值 jndi/composite/name
hibernate.transaction.manager_lookup_class 一个TransactionManagerLookup 的类名 - 当使用 JVM 级缓存,或在JTA 环境中使用 hilo 生成器的时候需要该类 . 取值 classname.of.TransactionManagerLookup
hibernate.transaction.flush_before_completion 如果开启, session 在事务完成后将被自动清洗 (flush) 。 现在更好的方法是使用自动 session 上下文管理。取值 true | false
hibernate.transaction.auto_close_session 如果开启, session 在事务完成后将被自动关闭。 现在更好的方法是使用自动 session 上下文管理。取值 true | false
hibernate.query.factory_class 选择HQL 解析器的实现 . 取值 org.hibernate.hql.ast.ASTQueryTranslatorFactory or org.hibernate.hql.classic.ClassicQueryTranslatorFactory
hibernate.query.substitutions 将Hibernate 查询中的符号映射到 SQL 查询中的符号 ( 符号可能是函数名或常量名字). 取值 hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC
hibernate.hbm2ddl.auto 在SessionFactory 创建时,自动检查数据库结构,或者将数据库 schema 的 DDL 导出到数据库 . 使用 create-drop 时 , 在显式关闭 SessionFactory 时,将 drop 掉数据库 schema. 取值 validate | update | create | create-drop
hibernate.cglib.use_reflection_optimizer 开启CGLIB 来替代运行时反射机制 ( 系统级属性 ). 反射机制有时在除错时比较有用 . 注意即使关闭这个优化 , Hibernate 还是需要 CGLIB. 你不能在 hibernate.cfg.xml 中设置此属性 . 取值 true | false
RDBMS 方言
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect
org.hibernate.type 为所有JDBC 参数记录日志
org.hibernate.tool.hbm2ddl 在所有SQL DDL 语句执行时为它们记录日志
org.hibernate.pretty 在session 清洗 (flush) 时,为所有与其关联的实体 ( 最多 20 个 ) 的状态记录日志
org.hibernate.cache 为所有二级缓存的活动记录日志
org.hibernate.transaction 为事务相关的活动记录日志
org.hibernate.jdbc 为所有JDBC 资源的获取记录日志
org.hibernate.hql.AST 在解析查询的时候, 记录 HQL 和 SQL 的 AST 分析日志
org.hibernate.secure 为JAAS 认证请求做日志
org.hibernate 为任何Hibernate 相关信息做日志 ( 信息量较大 , 但对查错非常有帮助 )
JTA TransactionManagers
Transaction工厂类 应用程序服务器
org.hibernate.transaction.JBossTransactionManagerLookup JBoss
org.hibernate.transaction.WeblogicTransactionManagerLookup Weblogic
org.hibernate.transaction.WebSphereTransactionManagerLookup WebSphere
org.hibernate.transaction.WebSphereExtendedJTATransactionLookup WebSphere 6
org.hibernate.transaction.OrionTransactionManagerLookup Orion
org.hibernate.transaction.ResinTransactionManagerLookup Resin
org.hibernate.transaction.JOTMTransactionManagerLookup JOTM
org.hibernate.transaction.JOnASTransactionManagerLookup JOnAS
org.hibernate.transaction.JRun4TransactionManagerLookup JRun4
org.hibernate.transaction.BESTransactionManagerLookup
<property name="hibernateProperties"> <props> <prop key="hibernate.cache.use_second_level_cache"> true </prop> <prop key="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </prop> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <!--prop key="hibernate.cglib.use_reflection_optimizer"> true </prop--> <prop key="hibernate.query.factory_class"> <!-- org.hibernate.hql.classic.ClassicQueryTranslatorFactory --> org.hibernate.hql.ast.ASTQueryTranslatorFactory </prop> <prop key="hibernate.show_sql">false</prop> <!-- 用Hibernate来维护实体类的持久化<prop key="hibernate.hbm2ddl.auto">create</prop> --> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.connection.useUnicode">true</prop> <prop key="hibernate.connection.characterEncoding"> gbk </prop> <!-- 使用二级缓存和查询缓存,提高性能 --> <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </prop> </props> </property>