引用 Hibernate 配置屬性

來源:互聯網
上載者:User

表 4.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。這將關閉Hibernate內建的串連池. 例如, 你可能會想用C3P0.

C3P0是一個隨Hibernate一同分發的開源的JDBC串連池, 它位於lib目錄下。 如果你設定了hibernate.c3p0.*相關的屬性, Hibernate將使用C3P0ConnectionProvider來緩衝JDBC串連. 如果你更原意使用Proxool, 請參考發 行包中的hibernate.properties併到Hibernate網站擷取更多的資訊.

這是一個使用C3P0的hibernate.properties範例檔案:

hibernate.connection.driver_class = org.postgresql.Driverhibernate.connection.url = jdbc:postgresql://localhost/mydatabasehibernate.connection.username = myuserhibernate.connection.password = secrethibernate.c3p0.min_size=5hibernate.c3p0.max_size=20hibernate.c3p0.timeout=1800hibernate.c3p0.max_statements=50hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

為了能在應用程式伺服器(application server)中使用Hibernate, 你應當總是將Hibernate 配置成註冊在JNDI中的Datasource處獲得串連,你至少需要設定下列屬性中的一個:

表 4.2.  Hibernate資料來源屬性

屬性名稱 用途
hibernate.connection.datasource 資料來源JNDI名字
hibernate.jndi.url JNDI提供者的URL (可選)
hibernate.jndi.class JNDI InitialContextFactory類 (可選)
hibernate.connection.username 資料庫使用者 (可選)
hibernate.connection.password 資料庫使用者密碼 (可選)

這裡有一個使用應用程式伺服器JNDI資料來源的hibernate.properties範例檔案:

hibernate.connection.datasource = java:/comp/env/jdbc/testhibernate.transaction.factory_class = \    org.hibernate.transaction.JTATransactionFactoryhibernate.transaction.manager_lookup_class = \    org.hibernate.transaction.JBossTransactionManagerLookuphibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

從JNDI資料來源獲得的JDBC串連將自動參與應用程式伺服器中容器管理的事務(container-managed transactions)中去.

任何串連(connection)配置屬性的屬性名稱要以"hibernate.connnection"首碼開頭. 例如, 你可能會使用hibernate.connection.charSet來指定charSet.

通過實現org.hibernate.connection.ConnectionProvider介面,你可以定義屬於 你自己的獲得JDBC串連的外掛程式策略。通過設定hibernate.connection.provider_class, 你可以選擇一個自訂的實現.

4.4.  可選的配置屬性

有大量屬效能用來控制Hibernate在運行期的行為. 它們都是可選的, 並擁有適當的預設值.

警告: 其中一些屬性是"系統級(system-level)的". 系統級屬性可以通過java -Dproperty=value或hibernate.properties來設定, 而不能用上面描述的其他方法來設定.

表 4.3.  Hibernate配置屬性

屬性名稱 用途
hibernate.dialect 一個Hibernate Dialect類名允許Hibernate針對特定的關聯式資料庫產生最佳化的SQL.

取值 full.classname.of.Dialect

hibernate.show_sql 輸出所有SQL語句到控制台.

取值 true | false

hibernate.default_schema 在產生的SQL中, 將給定的schema/tablespace附加於非全限定名的表名上.

取值 SCHEMA_NAME

hibernate.default_catalog 在產生的SQL中, 將給定的catalog附加於沒全限定名的表名上.

取值 CATALOG_NAME

hibernate.session_factory_name SessionFactory建立後,將自動使用這個名字綁定到JNDI中.

取值 jndi/composite/name

hibernate.max_fetch_depth 為單向關聯(一對一, 多對一)的外串連抓取(outer join 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

表 4.4.  Hibernate JDBC和串連(connection)屬性

屬性名稱 用途
hibernate.jdbc.fetch_size 非零值,指定JDBC抓取數量的大小 (調用Statement.setFetchSize()).
hibernate.jdbc.batch_size 非零值,允許Hibernate使用JDBC2的批次更新.

取值 建議取5到30之間的值

hibernate.jdbc.batch_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 | false

hibernate.jdbc.use_get_generated_keys 在資料插入資料庫之後,允許使用JDBC3 PreparedStatement.getGeneratedKeys() 來擷取資料庫產生的key(鍵)。需要JDBC3+驅動和JRE1.4+, 如果你的資料庫驅動在使用Hibernate的標 識產生器時遇到問題,請將此值設為false. 預設情況下將使用串連的中繼資料來判定驅動的能力.

取值 true|false

hibernate.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.<propertyName> 將JDBC屬性propertyName傳遞到DriverManager.getConnection()中去.
hibernate.jndi.<propertyName> 將屬性propertyName傳遞到JNDI InitialContextFactory中去.

表 4.5.  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 能用來完全禁止使用二級緩衝. 對那些在類的映射定義中指定<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

表 4.6.  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). (在Hibernate和CMT一起使用時很有用.)

取值 true | false

hibernate.transaction.auto_close_session 如果開啟, session在事務完成後將被自動關閉. (在Hibernate和CMT一起使用時很有用.)

取值 true | false

表 4.7.  其他屬性

屬性名稱 用途
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.

取值 update | create | create-drop

hibernate.cglib.use_reflection_optimizer 開啟CGLIB來替代運行時反射機制(系統級屬性). 反射機制有時在除錯時比較有用. 注意即使關閉這個最佳化, Hibernate還是需要CGLIB. 你不能在hibernate.cfg.xml中設定此屬性.

取值 true | false

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.