標籤:
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.dialect:一個HibernateDialect類名允許Hibernate針對特定的關聯式資料庫產生最佳化的SQL。取值full.classname.of.Dialect(詳解見下)
hibernate.show_sql:輸出所有SQL語句到控制台,有一個另外的選擇是把org.hibernate.SQL這個logcategory設為debug。 eg:true|false
hibernate.format_sql:在log和console中列印出更漂亮的SQL。取值true|false
hibernate.default_schema:在產生的SQL中,將給定的scheam/tablespace附加於非全限定名的表名上,取值
SCHEMA_NAME
hibernate.default_catelog:在產生的SQL中,將給定的catalog附加於非全限定名的表名上。取值
CATALOG_NAME.
hibernate.session_factory_name:SessionFactory建立後,將自動使用這個名字綁定到JNDI中,取值jndi|composite|name
hibernate.max_fetch_depth:為單向關聯(一對一、多對一)的外串連抓取(outerjoin fetch)樹設定最大深度.值為0意味著將關閉預設的外串連抓取。取值建議在0到3之間。
hibernate.default_batch_fetch_size:為Hibernate關聯的批量抓取設定預設數量。取值建議為4、8和16。
hibernate.default_entity_mode:為由這個SessionFactory開啟的所有Session指定預設的實體表現模式,取值dynamic-map|dom4j|pojo
hibernate.order_updates:強制Hibernate按照被更新資料的主鍵,為SQL更新排序。這麼做將減少在高並發系統中事務的死結。取值 true|false
hibernate.generate_statistics:如果開啟,hibernate將收集有助於效能調節的統計資料。取值true|false
hibernate.use_identifer_rollback:如果開啟,在對象被刪除時產生的識別屬性將被重設為預設值。取值true|false
hibernate.use_sql_comments:如果開啟,hibernate將在SQL中產生有助於調式的註解資訊。預設為false取值true|false ==================================================================================================-
Hibernate JDBC 和串連(Connection)屬性
hibernate.jdbc.fetch_size:非零值,指定JDBC抓取數量的大小(調用Statement.setFetchSize())
hibernate.jdbc.batch_size:非零值,允許Hibernate使用JDBC2的批次更新,取值建議 5到 30 之間。
hibernate.jdbc.tatch_versioned_data:如果你想讓你的JDBC驅動從executeBatch()返回正確的行計數,那麼將此屬性設定為true(開啟這個選項通常是安全的)同時Hibernate將為自動版本化的資料使用批量DML。預設為false。EG:true|false
hibernate.jdbc.factory_class:選擇一個自訂的Batcher.多數應用程式不需要配置這個屬性。eg:classname.of.Batcher
hibernate.jdbc.use_scrollable_resultset:允許Hibernate使用JDBC2的可滾動結果集,自由在使用使用者提供的JDBC串連時,這個選項才是必要的,否則Hibernate會使用串連的中繼資料取值 true|false
hibernate.jdbc.use_streams_for_binary:在JDBC讀寫binary(二進位)或serializable(可序列化)的類型時使用流(stream)(系統級屬性)取值true|falsehibernate.jdbc.use_get_generated_keys:在資料插入資料庫之後,允許使用JDBC3PreparedStatement.getGeneratedKeys()來擷取資料庫產生的key(鍵)。需要JDBC3+驅動和JRE1.4+,如果你的資料庫驅動在使用Hibernate的標識產生器時遇到問題,請將次值設定為false,預設情況下使用串連的中繼資料來判定驅動的能力。取值true|falsehibernate.connection.provider_class:自訂ConnectionProvider 的類名 , 此類用來向 Hibernate 提供 JDBC 串連 . 取值 classname.of.ConnectionProvider hibernate.connection.isolation 設定JDBC 交易隔離等級 . 查看 java.sql.Connection 來瞭解各個值的具體意義 , 但請注意多數資料庫都不支援所有的隔離等級 . 取值 1, 2, 4, 8
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.connection:將JDBC屬性propertyName傳遞到DriverManager.getConnection()中去。
hibernate.jndi:將屬性propertyName傳遞到JNDIInitialContextFactory中去 ==================================================================================================
Hibernate緩衝屬性
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事務屬性
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其他屬性 hibernate.current_session_context_class 為" 當前 " Session 指定一個 ( 自訂的 ) 策略。eg. jta | thread | custom.Class
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 ======================================================================================
SQL方言 你應當總是為你的資料庫將hibernate.dialect 屬性設定成正確的 org.hibernate.dialect.Dialect 子類 . 如果你指定一種方言, Hibernate 將為上面列出的一些屬性使用合理的預設值 , 為你省去了手工指定它們的功夫 . Hibernate SQL方言 (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
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 ==================================================================================================
Hibernate日誌類別 org.hibernate.SQL 在所有SQL DML 語句被執行時為它們記錄日誌
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>
spring sessionFactory 屬性配置詳解,applicationContext中各種屬性詳解