天天看點

hibernate配置文檔

http://wenku.baidu.com/link?url=WYBBeSSYuRYa_Zr4y29CphRDCEhj0WgIpX0apvWlumXZkl5ZYuEKZB2drkAsnNaLF22FqZo1C6245kcwHce8EPaCx2yAyfNV32wqulQ63ni

由于 Hibernate 是為了能在各種不同環境下工作而設計的,是以存在着大量的配置參數。幸運的是多數配置參數都有比較直覺的預設值,并有随 Hibernate 一同分發的配置樣例 hibernate.properties(位于

etc/)來展示各種配置選項。所需做的僅僅是将這個樣例檔案複制到類路徑(classpath)下并進行定制。

3.1. 可程式設計的配置方式

org.hibernate.cfg.Configuration 執行個體代表了一個應用程式中 Java 類型到SQL資料庫映射的完整集合。org.hibernate.cfg.Configuration 被用來建構一個(不可變的(immutable))org.hibernate.SessionFactory。

映射定義則由不同的 XML 映射定義檔案編譯而來。

你可以直接執行個體化 org.hibernate.cfg.Configuration 來擷取一個執行個體,并為它指定 XML 映射定義檔案。如果映射定義檔案在類路徑(classpath)中,請使用 addResource()。例如:

Configuration cfg = new Configuration()     .addResource("Item.hbm.xml")     .addResource("Bid.hbm.xml");

一個替代方法(有時是更好的選擇)是,指定被映射的類,讓 Hibernate 幫你尋找映射定義檔案:  

Configuration cfg = new Configuration()

    .addClass(org.hibernate.auction.Item.class)     .addClass(org.hibernate.auction.Bid.class);

Hibernate 将會在類路徑(classpath)中尋找名字為 /org/hibernate/auction/Item.hbm.xml 和

/org/hibernate/auction/Bid.hbm.xml 映射定義檔案。這種方式消除了任何對檔案名的寫死

(hardcoded)。

org.hibernate.cfg.Configuration > 也允許你指定配置屬性。例如:

Configuration cfg = new Configuration()

    .addClass(org.hibernate.auction.Item.class)     .addClass(org.hibernate.auction.Bid.class)

    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")     .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")     .setProperty("hibernate.order_updates", "true");

     五一長假除了旅遊 還能做什麼?  輔導補習  美容養顔  家庭家務  加班須知      

當然這不是唯一的傳遞 Hibernate 配置屬性的方式,其他可選方式還包括:  

1. 傳一個 java.util.Properties 執行個體給 Configuration.setProperties()。

2. 将 hibernate.properties 放置在類路徑(classpath)的根目錄下(root directory)。 3. 通過 java -Dproperty=value 來設定系統(System)屬性。 4. 在 hibernate.cfg.xml 中加入元素 <property>(稍後讨論)。  

如果你想快速上路,hibernate.properties 就是最容易的途徑。

org.hibernate.cfg.Configuration 執行個體被設計成啟動期間(startup-time)對象,一旦 SessionFactory 創

建完成它就被丢棄了。

3.2. 獲得 SessionFactory

當所有映射定義被 org.hibernate.cfg.Configuration 解析後,應用程式必須獲得一個用于構造

org.hibernate.Session 執行個體的工廠。這個工廠将被應用程式的所有線程共享:

SessionFactory sessions = cfg.buildSessionFactory();

Hibernate 允許你的應用程式建立多個 org.hibernate.SessionFactory 執行個體。這對 使用多個資料庫的應用來說很有用。

3.3. JDBC 連接配接

通常你希望 org.hibernate.SessionFactory 來為你建立和緩存(pool)JDBC 連接配接。如果你采用這種方式,隻需要如下例所示那樣,打開一個 org.hibernate.Session:

Session session = sessions.openSession(); // open a new Session

一旦你需要進行資料通路時,就會從連接配接池(connection pool)獲得一個 JDBC 連接配接。  

為了使這種方式工作起來,我們需要向 Hibernate 傳遞一些 JDBC 連接配接的屬性。所有 Hibernate 屬性的名字和語義都在 org.hibernate.cfg.Environment 中定義。我們現在将描述 JDBC 連接配接配置中最重要的設定。

如果你設定如下屬性,Hibernate 将使用 java.sql.DriverManager 來獲得(和緩存)JDBC 連接配接:

表 3.1. Hibernate JDBC 屬性

屬性名

用途

hibernate.connection.driver_class JDBC driver class hibernate.connection.url JDBC URL hibernate.connection.username database user

hibernate.connection.password 資料庫使用者密碼

hibernate.connection.pool_size maximum number of pooled connections

但 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.Driver

hibernate.connection.url = jdbc:postgresql://localhost/mydatabase hibernate.connection.username = myuser hibernate.connection.password = secret hibernate.c3p0.min_size=5 hibernate.c3p0.max_size=20 hibernate.c3p0.timeout=1800 hibernate.c3p0.max_statements=50

hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

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

表 3.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/test hibernate.transaction.factory_class = \

    org.hibernate.transaction.JTATransactionFactory hibernate.transaction.manager_lookup_class = \

    org.hibernate.transaction.JBossTransactionManagerLookup hibernate.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,你可以選擇一個自定義的實作。  

3.4. 可選的配置屬性

有大量屬性能用來控制 Hibernate 在運作期的行為。它們都是可選的,并擁有适當的預設值。  

警告

其中一些屬性是"系統級(system-level)的"。系統級屬性隻能通過java -Dproperty=value 或

hibernate.properties 來設定,而不能用上面描述的其他方法來設定。

表 3.3. Hibernate 配置屬性

屬性名 用途

hibernate.dialect

允許 Hibernate 針對特定的關系資料庫生成優化的 SQL 的 org.hibernate.dialect.Dialect 的類名。  

例如:full.classname.of.Dialect  

在大多數情況下,Hibernate 可以根據 JDBC 驅動傳回的

JDBC

metadata

選擇正确的

org.hibernate.dialect.Dialect 實作。  

hibernate.show_sql

輸出所有 SQL 語句到控制台。有一個另外的選擇是把

org.hibernate.SQL 這個 log category設為 debug。  

例如:true | false  

hibernate.format_sql

在 log 和 console 中列印出更漂亮的 SQL。  

例如:true | false  

hibernate.default_schema

在生成的 SQL 中,将給定的 schema/tablespace 附加

于非全限定名的表名上。  

例如:SCHEMA_NAME  

hibernate.default_catalog

在生成的 SQL 中,将給定的 catalog 附加于非全限定名

的表名上。  

例如:CATALOG_NAME  

hibernate.session_factory_name

org.hibernate.SessionFactory 建立後,将自動使用這個名

字綁定到 JNDI 中。