首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Hibernate 核心配置屬性完整參考手冊 (下):可選配置項詳解

     編輯:J2EE

前言

本文為 Hibernate 文檔筆記第三部分,系統梳理 hibernate.cfg.xml / hibernate.properties 中所有可選配置屬性,分為五大類:核心配置、JDBC/連接、緩存、事務、雜項。系統級屬性 (標註 *) 僅能通過 -Dproperty=value 或 hibernate.properties 設置。

一、Hibernate 核心配置項

屬性名說明取值範圍/建議
hibernate.dialect方言類,自動生成優化 SQLorg.hibernate.dialect.* 子類,通常可自動檢測
hibernate.show_sql控制台輸出 SQLtrue|false (建議生產關閉,改用 Log4j org.hibernate.SQL=DEBUG)
hibernate.format_sql格式化輸出 SQLtrue|false
hibernate.default_schemaSQL 中自動加 Schema 前綴Schema 名稱
hibernate.default_catalogSQL 中自動加 Catalog 前綴Catalog 名稱
hibernate.session_factory_nameSessionFactory 綁定 JNDI 名jndi/sf
hibernate.max_fetch_depth外連接最大深度 (0 禁用)0-3 (建議 0 或 1)
hibernate.default_batch_fetch_size批量抓取大小 (優化 N+1)4, 8, 16 (強烈建議開啟)
hibernate.default_entity_mode實體表現模式pojo|dynamic-map|dom4j
hibernate.order_updates按主鍵排序 UPDATE 減少死鎖true|false (高併發建議 true)
hibernate.generate_statistics收集性能統計 (SessionFactory.getStatistics())true|false
hibernate.use_identifier_rollback刪除後重置 ID 為默認值true|false
hibernate.use_sql_commentsSQL 註釋 (利於調試/分析)true|false (建議開發開啟)

二、JDBC 與連接屬性

屬性名說明取值/建議
hibernate.jdbc.fetch_sizeJDBC Statement Fetch Size整數 (如 50, 100)
hibernate.jdbc.batch_sizeJDBC 批量更新大小 (0 禁用)5-30 (批量寫入必開)
hibernate.jdbc.batch_versioned_data批量版本數據返回正確行數true|false (默認 false, 通常安全開啟)
hibernate.jdbc.factory_class自定義 Batcher 工廠類全限定名 (極少用)
hibernate.jdbc.use_scrollable_resultset使用 JDBC2 可滾動結果集true|false (用戶提供連接時需顯式設置)
hibernate.jdbc.use_streams_for_binary二進制/序列化數據用流讀寫true|false (系統級*)
hibernate.jdbc.use_get_generated_keys用 JDBC3 getGeneratedKeys 回填主鍵true|false (需 JDBC3+/JRE1.4+,驅動有 Bug 時關閉)
hibernate.connection.provider_classConnectionProvider 實現類類名 (如 C3P0/Druid/Hikari 整合類)
hibernate.connection.isolationJDBC 事務隔離級別1(READ_UNCOMMITTED)|2(READ_COMMITTED)|4(REPEATABLE_READ)|8(SERIALIZABLE)
hibernate.connection.autocommit共享連接自動提交 (不推薦)true|false
hibernate.connection.release_mode連接釋放時機auto|on_close|after_statement|after_transaction (JTA 建議 after_statement)
hibernate.connection.<propertyName>透傳 DriverManager.getConnection 參數如 url, user, password
hibernate.jndi.<propertyName>透傳 JNDI InitialContext 參數如 provider.url, context.factory

三、緩存屬性 (二級緩存/查詢緩存)

屬性名說明取值/建議
hibernate.cache.provider_classCacheProvider 實現 (Ehcache/Infinispan/Redis/Hazelcast)類名
hibernate.cache.use_minimal_puts優化集群寫入 (多讀少寫)true|false (集群環境默認 true)
hibernate.cache.use_query_cache啟用查詢緩存true|false (需顯式 setCacheable(true))
hibernate.cache.use_second_level_cache啟用二級緩存 (指定 Provider 後默認開啟)true|false
hibernate.cache.query_cache_factoryQueryCache 實現類默認 StandardQueryCache
hibernate.cache.region_prefix緩存區域名稱前綴 (多 SessionFactory 隔離)字符串前綴
hibernate.cache.use_structured_entries緩存存儲人性化格式 (利於調試)true|false

四、事務屬性

屬性名說明取值/建議
hibernate.transaction.factory_classTransactionFactory 實現默認 JDBCTransactionFactory (JTA 環境用 JTATransactionFactory)
hibernate.transaction.manager_lookup_classTransactionManagerLookup 實現 (JTA 環境必需)類名 (如 JBossTransactionManagerLookup)
hibernate.transaction.flush_before_completion事務完成前自動 flushtrue|false (建議由上下文管理器控制)
hibernate.transaction.auto_close_session事務完成後自動 close sessiontrue|false (建議由上下文管理器控制)

注意: flush_before_completion / auto_close_session 在使用 CurrentSessionContext (如 thread, jta) 時由上下文管理器優先處理,配置項可能被忽略。

五、雜項屬性

屬性名說明取值/建議
hibernate.current_session_context_class當前 Session 範圍策略jta|thread|managed|自定義類 (Spring 整合通常用 SpringSessionContext)
hibernate.query.factory_classHQL 解析器實現ASTQueryTranslatorFactory (默認, 高性能) / ClassicQueryTranslatorFactory
hibernate.query.substitutionsHQL 標記映射到 SQL 標記hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUN
hibernate.hbm2ddl.auto啟動時 DDL 自動操作validate|update|create|create-drop (生產嚴禁 create/create-drop)
hibernate.cglib.use_reflection_optimizer *用 CGLIB 代替反射優化 (系統級*)true|false (不可在 cfg.xml 中設置,需 JVM 參數)

生產環境核心配置模板

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.jdbc.batch_size">20</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.default_batch_fetch_size">16</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.ehcache.EhCacheProvider</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_minimal_puts">true</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.hbm2ddl.auto">validate</property>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved