Hibernate配置項屬性解釋

hibernate.properties

#Oracle方言

 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

 hibernate.dialect=org.hibernate.dialect.SQLServerDialect

#hibernate方言

hibernate.dialect=org.hibernate.dialect.SQLServerDialect

#是否啓用二級緩存,

hibernate.cache.use_query_cache=true

#二級緩存class

 hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider

 hibernate.cache.provider_class=org.hibernate.cache.SingletonEhCacheProvider

hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider

# 二級緩存配置文件

hibernate.cache.provider_configuration_file_resource_path=/cache/ehcache.xml

#是否同步數據庫結構(自動創建|更新|驗證數據庫表結構)

hibernate.hbm2ddl.auto=none

none: 不做任何操作

create: 每次加載hibernate時都會刪除上一次的生成的表,然後根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行。會導致數據庫表 數據丟失。

create-drop: 每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。

update:第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建 立好數據庫),以後加載hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器後,表結構是不會被馬上建立起來的,是要等 應用第一次運行起來後纔會。

validate:驗證創建數據庫表結構,只會和數 據庫中的表進行比較,不會創建新表,但是會插入新值。

 

#關於hibernate.jdbc.fetch_size與 hibernate.jdbc.batch_size的設置,可能會將嚴重影響Hibernate的CRUD性能。

#設定JDBC的Statement讀取數據的時候每次從數據庫中取出的記錄條數。

#Fetch Size設的越大,讀數據庫的次數越少,速度越快;Fetch Size越小,讀數據庫的次數越多,速度越慢。

#MySQL就支持Fetch Size特性

hibernate.jdbc.fetch_size=20

# 設定對數據庫進行批量刪除,批量更新和批量插入的時候的批次大小。

#Batch Size越大,批量操作的向數據庫發送sql的次數越少,速度就越快。

hibernate.jdbc.batch_size=50

#設置外連接抓取樹的最大深度取值. 建議設置爲0到3之間

#hibernate.max_fetch_depth

#是否顯示最終執行的SQL(開發環境)

hibernate.show_sql=false

# 格式化顯示的SQL

hibernate.format_sql=false

# 如果設置爲true,Hiberante將爲SQL產生註釋,這樣更利於調試。默認值爲false。取值爲true|false。

hibernate.use_sql_comments=false

 

 

(附 錄) Hibernate配置項:

 

1.Hibernate配置項

(1)hibernate.dialect指定方言後,Hibernate可以根據低層數據庫自動產生優化過的SQL。取值爲 org.hibenate.dialect.Dialect的繼承類。多數情況下,Hibernate可以根據低層JDBC返回的metadata來判 斷。

(2)hibernate.show_sql打印所有的SQL語句到控制檯, 可以通過設置org.hibernate.SQL類的日誌策略到DEBUG級,實現同樣的效果。取值 true|false。

(3)hibernate.format_sql 格式化SQL語句在打印到控制檯或寫入日誌文件時。取值true|false。

(4)hibernate.default_schema 在產生SQL語句時,在表名前加上映射文件給出的表空間(tablespace)或數據庫模式(schema)。取值SCHEMA_NAME。

(5)hibernate.default_catalog 在產生SQL語句時,在表名前加上映射文件給出的catalog。取值CATALOG_NAME。

(6)hibernate.session_factory_name  Hibernate創建org.hibernate.SessionFactory 實例後後會自動的將這個綁定到JNDI中的名字上。取值jndi/sf。

(7)hibernate.max_fetch_depth 設置對單個表的外連接數最大深度。0是屏蔽默認的外連接設置。推薦設置爲0到3之間。

(8)hibernate.default_batch_fetch_size 設置Hibernate批量聯合查詢的尺度。強烈建議。推薦設置爲4、8、16。

(9)hibernate.default_entity_mode 默認的實體表現模式,通過SessionFactory打開的所有的Session。取值,dynamic-map、dom4j、pojo。

(10)hibernate.order_updates 強迫Hibernate通過被更新項的主鍵值排序SQL更新。這樣可以在高併發時,減少事務死鎖。取值 true|false。

(11)hibernate.generate_statistics 如果設置爲true,Hibernate將爲性能調整,收集統計信息。取值 true|false。

(12)hibernate.use_identifier_rollback 如果設置爲true,產生的標識屬性將被重置成默認值,當對象被刪除後。取值爲true|false。

(13)hibernate.use_sql_comments 如果設置爲true,Hiberante將爲SQL產生註釋,這樣更利於調試。默認值爲false。取值爲true|false。

2.Hibernate JDBC和連接的屬性

(1)hibernate.jdbc.fetch_size 指定JDBC的查詢尺度。通過調用(Statement.setFetchSize())。

(2)hibernate.jdbc.batch_size 指定Hibernate如何使用JDBC2批量更新。取值,推薦5到30。

(3)hibernate.jdbc.batch_versioned_data 設置這個屬性爲true,JDBC將返回executeBatch執行後正確的行數。打開這個參數,通常是安全的。Hibernate將自動的譯碼這些數 據使用批量DML。默認爲false。取值true|false。

(4)hibernate.jdbc.factory_class 選擇一個定製的org.hibernate.jdbc.Batcher。所有的應用程序不需要配置這個屬性。取值,定義工廠的類名。

(5)hibernate.jdbc.use_scrollable_resultset  Hibernate使用JDBC2的可滾動記錄集。當使用用戶提供的JDBC連接時,需要設置這個參數。否則,Hibernate使用連接 MetaData。取值 true|false。

(6)hibernate.jdbc.use_streams_for_binary 當讀或寫二進制數據或序列化數據從JDBC或到JDBC,使用流。系統級的數據。設置true|false。

(7)hibernate.jdbc.use_get_generated_keys 在插入後,可以使用JDBC3的PreparedStatement.getGeneratedKeys()中的值找回本地產生的鍵值。要求JDBC3+ 和JRE1.4+,如果使用Hibernate identifier generator後你的驅動程序有問題,請設置爲false。默認情況下,設法連接MetaData來決定。取值,true|false。

(8)hibernate.connection.provider_class 實現了org.hibernate.connection.ConnectionProvider 接口的類的名稱,爲Hibernate提供連接。

(9)hibernate.connection.isolation 設置JDBC事務隔離的級別。檢查java.sql.Connection的定義的常量值,但要注意大多數數據庫不支持所有的隔離級別、一些附加的和非標 準的隔離級別。取值,1、2、4、8。

(10)hibernate.connection.autocommit  JDBC共享連接的自動提交。(不推薦)取值,true|false。

(11)hibernate.connection.release_mode 指定什麼時候,Hibernate應該釋放JDBC連接。默認情況下,JDBC是一直存在,只到Session是被明確關閉或斷開連接時。對於應用的服務 器JTA數據源,你應該使用after_statement強制釋放JDBC連接在每個 JDBC請求結束後。對於非JTA數據源,通常是在每個事務結束後釋放JDBC連接是有意義的。將該值設爲auto時,JTA和CMT事務策略時,是選擇 after_statement方式。JDBC事務策略時,是選擇after_transaction。取 值,auto(default),on_close,after_statment,after_transaction。

注意:這個設置隻影響通過SessionFactory.openSession打開的 session。對於通過 SessionFactory.getCurrentSession獲取的session,CurrentSessionContext實現類的配置是用 來控制這些session的連接釋放模式。

(12)hibernate.connection. 傳遞這些屬性到DriverManager.getConnection中。

(13)hibernate.jndi. 傳遞這些屬性到JNDI InitialContextFactory。

3.Hibernate Cache 屬性

(1)hibernate.cache.provider_class 定製的CacheProvider的類名。

(2)hibernate.cache.use_minimal_puts 花費更多的讀操作,來優化二級緩存的最少寫操作。這個操作對於集羣緩存是非常有用的。在Hibernate3中,對於集羣緩存是默認開啓該功能的。取 值,true|false。

(3)hibernate.cache.use_query_cache 開啓查詢緩存,個別查詢肯定應該開啓查詢緩存。取值,true|false。

(4)hibernate.cache.use_second_level_cache 也許過去習慣於完全屏蔽掉二級緩存,默認是開啓,對於指定CacheProvider實現類的情況。取值,true|false。

(5)hibernate.cache.query_cache_factory  實現QueryCache接口的類名,默認是內置的StandardQueryCache。

(6)hibernate.cache.region_prefix 對於使用二級緩存區域名的前綴。

(7)hibernate.cache.use_structured_entries 強迫Hibernate在存儲數據到二級緩存時,使用更人性化的格式。取值,true|false。

4.Hibernate事務屬性

(1)hibernate.transaction.transaction_class  使用Hibernate事務APIs的TransactionFactory的類名。默認是JDBCTransactionFactory。

(2)jta.UserTransaction  JTATransactionFactory使用JNDI名字從應用服務器中獲取JTA UserTransaction。取值,jndi/ut。

(3)hibernate.transaction.manager_lookup_class 是一個TransactionManagerLookup實現類的類名。當JVM級別的緩存開啓時或在JTA環境中使用hilo generator時,要求指定該值。

(4)hibernate.transaction.flush_before_completion 如果設爲true,session將在事務完成階段之前,自動將緩存區的值推入到數據庫中。內置和自動session上下文管理是被優先選用的。取 值,true|false。

(5)hibernate.transaction.auto_close_session 如果設爲true,session將在事務完成之後,自動的關閉session。內置和自動session上下文管理是被優先選用的。取 值,true|false。

5.Miscellaneous properties 各種混合的屬性

(1)hibernate.current_session_context_class 提供一個對於當前session生命週期的策略。取值,jta、thread、managed、定製類名。

(2)hibernate.query.factory_class 選擇HSQL的解析實現類。取值,org.hibernate.hsql.ast.ASTQueryTranslatorFactory 和org.hibernate.hsql.classic.ClassicQueryTranslatorFactory。

(3)hibernate.query.subsitutions Hibernate中標記符到SQL中標記符的映射。舉例說,可以是函數名或普通字符串名。取值,如 hsqLiteral=SQL_LITERAL,hqlFunction=SQLFUN。

(4)hibernate.hbm2ddl.auto 當SessionFactory被創建時,自動的驗證或輸出模式DDL(也就建表語句)到數據庫中。也就是說,自動的驗證數據庫表結構或先刪除再重新建 立,或在原表結構上更新數據表結構。當將值置爲create-drop時,在SessionFactory被清除時,將刪除數據庫中表結構。取 值,validate、create、update、create-drop。

(5)hibernate.cglib.use_reflection_optimizer 用CGLIB代替運行期的reflection(系統級屬性)。在有故障時,反射是非常有用的,注意Hibernate總是需要CGLIB,甚至在你關閉 優化後。你不可以設置這個屬性在hibernate.cfg.xml 文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章