
配置文件默認為:hibernate.cfg.xml
Hibernater初始化期間會自動在CLASSPATH中尋找這個文件,并讀取其中的配置信息,為后期數據庫操作做好準備。
配置文件應部署在CLASSPATH中,對于Web應用而言,配置文件應放置在/WEB-INF/classes,目錄下
配置文件內容:
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> <session-factory> <!--方言 --> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <!--數據庫URL --> <property name="connection.url"> jdbc:oracle:thin:@localhost:1521:orcl </property> <!--數據庫訪問的用戶名 --> <property name="connection.username">accp</property> <!--數據庫訪問的用戶名的密碼 --> <property name="connection.passWord">accp</property> <!--數據庫驅動這里是oracle數據庫的 --> <property name="connection.driver_class"> oracle.jdbc.OracleDriver </property> <property name="myeclipse.connection.profile">oracle</property> <!--是否顯示執行的SQL語句 --> <property name="show_sql">true</property> <!--是否使用數據庫外連接 --> <property name="hibernate.use_outer_join">true</property> <!--事務管理類型 --> <property name="hibernate.transaction.factory_class"> net.sf.hibernate.transaction.JDBCTransactionFactory </property> <!--映射文件配置 --> <mapping resource="com/pb/entity/Login.hbm.xml" /> </session-factory></hibernate-configuration>三、實體映射
在Hibernate中的對象關系映射就是把實體類與數據庫中的表相對應,實現實體類中的屬性與數據庫表中的字段一一對應
映射是按照持久化類(實體類)的定義一創建的,而非表的定義。
配置文件可以手動寫,也可以使用工具生成 如:MyEclipse生成實體類時,可以自動生成配置文件
配置文件名字:類名.hbm.xml
<?xml version='1.0' encoding='utf-8'?> <!-- 這里與hibernate.cfg.xml配置文件不一樣注意 --><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 這里與hibernate.cfg.xml配置文件不一樣注意 --><hibernate-mapping> <!--類名和數據庫中的表名相對應 哪個用戶 --> <class name="com.pb.entity.Login" table="LOGIN" schema="accp"> <!-- id代表主鍵 column列表 type代表數據類型--> <!-- 類中的屬性 --> <id name="username" type="java.lang.String"> <!-- 表中哪一個字段或者是列名 --> <column name="USERNAME" length="20" /> <!--生成的方式 assigned代表由外部外部程序負責生成,在 save() 之前必須指定一個--> <!-- native由hibernate根據使用的數據庫自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式,靈活性很強。如果能支持identity則使用identity,如果支持sequence則使用sequence。--> <generator class="assigned" /> </id> <!-- 密碼段設置 --> <!--類中的名字和數據類型 --> <property name="password" type="java.lang.String"> <!-- 表中的字段名,長度可心不要,是不為空true為不能為空,false是可以為空 --> <column name="PASSWORD" length="20" not-null="true"/> </property> <!--如果還有其它的屬性,設置方式與password一樣設置 --> </class></hibernate-mapping>




(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。
4.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。
4.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.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。
4.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 文件中。
新聞熱點
疑難解答