一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Hibernate中SessionFactory配置

 BlazerOfIT 2012-08-10
SessionFactory配置

因?yàn)镠ibernate被設(shè)計(jì)為可以在許多不同環(huán)境下工作,所以它有很多配置參數(shù)。幸運(yùn)的是,大部分都已經(jīng)有默認(rèn)值了,Hibernate發(fā)行包中還附帶有示例的hibernate.properties文件,它演示了一些可變的參數(shù)。一般你只需要把這個(gè)文件放到你的classpath,配置一下即可。

1. 可編程配置方式

net.sf.hibernate.cfg.Configuration的一個(gè)實(shí)例代表了應(yīng)用程序中所有的Java類(lèi)到SQL數(shù)據(jù)庫(kù)的映射的集合。Configuration用于構(gòu)造一個(gè)(不可變的)SessionFactory。這些映射是從一些XML映射文件中編譯得來(lái)的。

你可以得到一個(gè)Configuration的實(shí)例,直接實(shí)例化它即可。下面有一個(gè)例子,用來(lái)從兩個(gè)XML配置文件(位于classpath)中的映射中初始化:

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

另外一個(gè)(某些時(shí)候更好的)方法是讓Hibernate自行用getResourceAsStream()來(lái)裝載映射文件。

Configuration cfg = new Configuration()
    .addClass(org.hibernate.auction.Item.class)
    .addClass(org.hibernate.auction.Bid.class);

Hibernate 就會(huì)在classpath中尋找叫做/org/hibernate/autcion/Item.hbm.xml、/org/hibernate/autcion/Bid.hbm.xml的映射文件。這種方法取消了所有對(duì)文件名的硬編碼。

Configuration也可以指定一些可選的配置項(xiàng):

Properties props = new Properties();
...
Configuration cfg = new Configuration()
    .addClass(org.hibernate.auction.Item.class)
    .addClass(org.hibernate.auction.Bid.class)
    .setProperties(props);

Configuration是僅在配置期使用的對(duì)象,從第一個(gè)SessionFactory開(kāi)始建立的時(shí)候,它就失效了。

2. 獲取SessionFactory

當(dāng)所有的映射都被Configuration解析之后,應(yīng)用程序?yàn)榱说玫?TT class=literal>Session實(shí)例,必須先得到它的工廠。這個(gè)工廠應(yīng)該是被應(yīng)用程序的所有線程共享的:

SessionFactory sessions = cfg.buildSessionFactory();

當(dāng)然,Hibernate并不禁止你的程序?qū)嵗鄠€(gè)SessionFactory。在你使用不止一個(gè)數(shù)據(jù)庫(kù)的時(shí)候,這就有用了。

3. 用戶自行提供JDBC連接

SessionFactory可以使用一個(gè)用戶自行提供的JDBC連接來(lái)打開(kāi)一個(gè)Session。這種設(shè)計(jì)可以讓?xiě)?yīng)用程序來(lái)自己管理JDBC連接:

java.sql.Connection conn = datasource.getConnection();
Session session = sessions.openSession(conn);

// do some data access work

應(yīng)用程序必須小心,不能在同一個(gè)連接上打開(kāi)兩個(gè)并行的session!

4. Hibernate提供的JDBC連接

另一種方法就是,你可以讓SessionFactory替你打開(kāi)連接。SessionFactory必須事先知道JDBC連接的參數(shù),有幾種不同的方法設(shè)置參數(shù):

  1. 傳遞一個(gè)java.util.PropertiesConfiguration.setProperties()方法。

  2. 在classpath的根目錄中提供hibernate.properties文件。

  3. 通過(guò)java -Dproperty=value指定使用系統(tǒng)屬性。

  4. hibernate.cfg.xml文件中包含<property>元素。詳情見(jiàn)后。

如果你使用這種方法,打開(kāi)一個(gè)Session是非常簡(jiǎn)單的:

Session session = sessions.openSession(); // open a new Session
// do some data access work, a JDBC connection will be used on demand

所有的Hibernate屬性名和約束都在net.sf.hibernate.cfg.Environment類(lèi)中定義。我們討論一下JDBC連接配置最重要的幾項(xiàng)設(shè)置:

假若你設(shè)置了如下的屬性,Hibernate會(huì)使用java.sql.DriverManager來(lái)得到連接,并建立連接池:

表 3.1. Hibernate JDBC屬性

屬性名 用途
hibernate.connection.driver_class jdbc驅(qū)動(dòng)類(lèi)
hibernate.connection.url jdbc URL
hibernate.connection.username 數(shù)據(jù)庫(kù)用戶名
hibernate.connection.password 數(shù)據(jù)庫(kù)用戶密碼
hibernate.connection.pool_size 連接池容量最大數(shù)

Hibernate的連接池算法是非常可配置的。它的用途是讓你上手,但是并非讓你在生產(chǎn)系統(tǒng)中使用的,甚至不是用來(lái)做性能測(cè)試的。如果為了得到最好的性能和可靠性需要使用第三方的池,請(qǐng)用你連接池特定的設(shè)置來(lái)取代hibernate.connection.pool_size屬性。

C3P0是隨Hibernate發(fā)行包一起發(fā)布的一個(gè)開(kāi)放源代碼JDBC連接池,你可以在lib 目錄中找到。假若你設(shè)置了hibernate.c3p0.* 屬性,Hibernate會(huì)使用內(nèi)置的C3P0ConnectionProvider作為連接池。 對(duì)Apache DBCP和Proxool的支持也是內(nèi)置的。你必須設(shè)置hibernate.dbcp.*屬性 (DBCP連接池屬性)來(lái)打開(kāi)DBCPConnectionProvider。如果打開(kāi)hibernate.dbcp.ps.* (DBCP 語(yǔ)句緩存屬性)可以使用Prepared statement緩存(高度推薦)。要知道它們的含義,請(qǐng)查閱Apache commons-pool的文檔。如果你想要用Proxool,你需要設(shè)置hibernate.proxool.*系列屬性。

下面是使用C3P0的一個(gè)例子:

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 = net.sf.hibernate.dialect.PostgreSQLDialect

在Application Server內(nèi)使用時(shí),Hibernate可以從JNDI中注冊(cè)的javax.sql.Datasource取得連接。需要設(shè)置如下屬性:

表 3.2. Hibernate 數(shù)據(jù)源(Datasource)屬性

屬性名 用途
hibernate.connection.datasource datasource JNDI 名字
hibernate.jndi.url JNDI 提供者的URL (可選)
hibernate.jndi.class JNDI InitialContextFactory的類(lèi)名 (可選)
hibernate.connection.username 數(shù)據(jù)庫(kù)用戶名 (可選)
hibernate.connection.password 數(shù)據(jù)庫(kù)密碼 (可選)

下面是一個(gè)使用應(yīng)用服務(wù)器提供的JNDI數(shù)據(jù)源的例子:

hibernate.connection.datasource = java:/comp/env/jdbc/MyDB
hibernate.transaction.factory_class = /
    net.sf.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = /
    net.sf.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = /
    net.sf.hibernate.dialect.PostgreSQLDialect

從JNDI數(shù)據(jù)源獲得的JDBC連接自動(dòng)具有應(yīng)用服務(wù)器的容器管理事務(wù)的特性。

可以通過(guò)"hibernate.connnection"開(kāi)頭的屬性來(lái)設(shè)置特別的連接屬性。比如,你可以通過(guò)hibernate.connnection.charSet來(lái)指定charSet

通過(guò)實(shí)現(xiàn)net.sf.hibernate.connection.ConnectionProvider接口,你可以定義如何獲得JDBC連接的策略。你可以通過(guò)設(shè)置hibernate.connection.provider_class來(lái)選擇一個(gè)自定義的實(shí)現(xiàn)。

5. 可選配置屬性

下面是一些在運(yùn)行時(shí)可以改變Hibernate行為的其他配置。所有這些都是可選的,也有合理的默認(rèn)值。

系統(tǒng)級(jí)別的配置只能通過(guò)java -Dproperty=value或者在hibernate.properties文件中配置,而不能通過(guò)傳遞給ConfigurationProperties實(shí)例來(lái)配置。

表 3.3. Hibernate配置屬性

屬性名 用途
hibernate.dialect Hibernate方言(Dialect)的類(lèi)名 - 可以讓Hibernate使用某些特定的數(shù)據(jù)庫(kù)平臺(tái)的特性

取值. full.classname.of.Dialect

hibernate.default_schema 在生成的SQL中,scheml/tablespace的全限定名

取值. SCHEMA_NAME

hibernate.session_factory_name 自動(dòng)把創(chuàng)建的SessionFactory以這個(gè)名字綁定到JNDI中去.

取值. jndi/composite/name

hibernate.use_outer_join 允許使用外連接抓取。已經(jīng)失效。請(qǐng)使用max_fetch_depth。

取值. true | false

hibernate.max_fetch_depth 對(duì)單根聯(lián)合(一對(duì)一,多對(duì)一),設(shè)置外連接抓取樹(shù)的最大深度。如果是0將關(guān)閉默認(rèn)的外連接抓取。

取值. 建議設(shè)置為03之間

hibernate.jdbc.fetch_size 一個(gè)非零值,用來(lái)決定JDBC的獲取量大小。(會(huì)調(diào)用Statement.setFetchSize()).
hibernate.jdbc.batch_size 一個(gè)非零值,會(huì)開(kāi)啟Hibernate使用JDBC2的批量更新功能

取值. 建議值在 530之間。

hibernate.jdbc.use_scrollable_resultset 允許Hibernate使用JDBC2提供的可滾動(dòng)結(jié)果集。只有在使用用戶自行提供的JDBC連接時(shí),這個(gè)參數(shù)才是必需的。否則Hibernate會(huì)使用連接的元數(shù)據(jù)(metadata)。

取值. true | false

hibernate.jdbc.use_streams_for_binary 在從JDBC讀寫(xiě)binary(二進(jìn)制)或者serializable(可序列化)類(lèi)型時(shí),是否使用stream(流). (這是一個(gè)系統(tǒng)級(jí)別的屬性。)

取值. true | false

hibernate.jdbc.use_get_generated_keys 允許使用JDBC3的PreparedStatement.getGeneratedKeys()在插入后獲取數(shù)據(jù)庫(kù)自身生成的key。需要JDBC3以上的驅(qū)動(dòng)和JRE1.4以上,如果你的驅(qū)動(dòng)和Hibernate關(guān)鍵字生成器一起使用有問(wèn)題,請(qǐng)?jiān)O(shè)為false。默認(rèn)情況下,會(huì)用connection元數(shù)據(jù)根據(jù)驅(qū)動(dòng)是否支持自動(dòng)判斷。

取值. true|false

hibernate.cglib.use_reflection_optimizer 是否使用CGLIB來(lái)代替運(yùn)行時(shí)反射操作。(系統(tǒng)級(jí)別屬性,默認(rèn)為在可能時(shí)都使用CGLIB).在調(diào)試的時(shí)候有時(shí)候使用反射會(huì)有用。

取值. true | false

hibernate.jndi.<propertyName> propertyName這個(gè)屬性傳遞到JNDI InitialContextFactory去 (可選)
hibernate.connection.isolation 事務(wù)隔離級(jí)別 (可選).請(qǐng)檢查java.sql.Connection來(lái)得到取值的具體意義。注意大多數(shù)數(shù)據(jù)庫(kù)不會(huì)支持所有的隔離級(jí)別。

取值. 1, 2, 4, 8

hibernate.connection.<propertyName> propertyName這個(gè)JDBC 屬性傳遞到DriverManager.getConnection()
hibernate.connection.provider_class 指定一個(gè)自定義的ConnectionProvider類(lèi)名

取值. classname.of.ConnectionProvider

hibernate.cache.provider_class 指定一個(gè)自定義的CacheProvider緩存提供者的類(lèi)名

取值. classname.of.CacheProvider

hibernate.cache.use_minimal_puts 優(yōu)化第二級(jí)緩存操作,減少寫(xiě)操作,代價(jià)是讀操作更頻繁(對(duì)于集群緩存很有用)

取值. true|false

hibernate.cache.use_query_cache 打開(kāi)查詢緩存,每個(gè)查詢?nèi)匀槐仨氈该鱟acheable。

取值. true|false

hibernate.cache.region_prefix 用于第二級(jí)緩存區(qū)域名字的前綴

取值. prefix

hibernate.transaction.factory_class 指定一個(gè)自定義的TransactionFactory類(lèi)名,Hibernate Transaction API將會(huì)使用(默認(rèn)是JDBCTransactionFactory)。

取值. classname.of.TransactionFactory

jta.UserTransaction JTATransactionFactory 用來(lái)從應(yīng)用服務(wù)器獲取JTA UserTransaction的JNDI名

取值. jndi/composite/name

hibernate.transaction.manager_lookup_class TransactionManagerLookup的類(lèi)名 - 當(dāng)在JTA環(huán)境中,JVM級(jí)別的緩存被打開(kāi)的時(shí)候使用.

取值. classname.of.TransactionManagerLookup

hibernate.query.substitutions 把Hibernate查詢中的一些短語(yǔ)替換為SQL短語(yǔ)(比如說(shuō)短語(yǔ)可能是函數(shù)或者字符)。

取值. hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC

hibernate.show_sql 把所有的SQL語(yǔ)句都輸出到控制臺(tái)

取值. true | false

hibernate.hbm2ddl.auto SessionFactory創(chuàng)建后,自動(dòng)輸出schema創(chuàng)建DDL語(yǔ)句到數(shù)據(jù)庫(kù).和create-drop同時(shí)使用的話,數(shù)據(jù)庫(kù)schema會(huì)在SessionFactory顯式關(guān)閉后被drop掉。

取值. update | create | create-drop

5.1. SQL Dialects SQL 方言

你總是可以為你的數(shù)據(jù)庫(kù)設(shè)置一個(gè)hibernate.dialect方言,它是net.sf.hibernate.dialect.Dialect 的一個(gè)子類(lèi)。如果你不需要使用基于native或者sequence的主鍵自動(dòng)生成算法,或者悲觀鎖定(使用Session.lock()Query.setLockMode())的話,方言就可以不必指定。然而,假若你指定了一個(gè)方言,Hibernate會(huì)為上面列出的一些屬性使用特殊默認(rèn)值,省得你手工指定它們。

表 3.4. Hibernate SQL 方言 (hibernate.dialect)

RDBMS 方言
DB2 net.sf.hibernate.dialect.DB2Dialect
DB2 AS/400 net.sf.hibernate.dialect.DB2400Dialect
DB2 OS390 net.sf.hibernate.dialect.DB2390Dialect
PostgreSQL net.sf.hibernate.dialect.PostgreSQLDialect
MySQL net.sf.hibernate.dialect.MySQLDialect
Oracle (any version) net.sf.hibernate.dialect.OracleDialect
Oracle 9 net.sf.hibernate.dialect.Oracle9Dialect
Sybase net.sf.hibernate.dialect.SybaseDialect
Sybase Anywhere net.sf.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server net.sf.hibernate.dialect.SQLServerDialect
SAP DB net.sf.hibernate.dialect.SAPDBDialect
Informix net.sf.hibernate.dialect.InformixDialect
HypersonicSQL net.sf.hibernate.dialect.HSQLDialect
Ingres net.sf.hibernate.dialect.IngresDialect
Progress net.sf.hibernate.dialect.ProgressDialect
Mckoi SQL net.sf.hibernate.dialect.MckoiDialect
Interbase net.sf.hibernate.dialect.InterbaseDialect
Pointbase net.sf.hibernate.dialect.PointbaseDialect
FrontBase net.sf.hibernate.dialect.FrontbaseDialect
Firebird net.sf.hibernate.dialect.FirebirdDialect

5.2. 外連接抓?。∣uter Join Fetching )

如果你的數(shù)據(jù)庫(kù)支持ANSI或者Oracle風(fēng)格的外連接,外連接抓取可能提高性能,因?yàn)榭梢韵拗坪蛿?shù)據(jù)庫(kù)交互的數(shù)量(代價(jià)是數(shù)據(jù)庫(kù)自身進(jìn)行了更多的工作)。外連接抓取允許你在一個(gè)select語(yǔ)句中就可以得到一個(gè)由多對(duì)一或者一對(duì)一連接構(gòu)成的對(duì)象圖。

默認(rèn)情況下,抓取在葉對(duì)象,擁有代理的對(duì)象或者產(chǎn)生對(duì)自身的引用時(shí)終止。

對(duì)一個(gè)特定關(guān)聯(lián)來(lái)說(shuō),通過(guò)在XML映射文件中設(shè)置outer-join屬性可以控制是否開(kāi)啟抓取功能。

也可以設(shè)置hibernate.max_fetch_depth0來(lái)全局關(guān)閉此功能。如果設(shè)置為1或更高的數(shù)值,對(duì)所有的一對(duì)一和多對(duì)一關(guān)聯(lián)會(huì)打開(kāi)外連接抓取。默認(rèn)情況下,它被設(shè)置為auto,即自動(dòng)外連接。但是,一對(duì)多關(guān)聯(lián)和集合永遠(yuǎn)不會(huì)使用外連接抓取,除非對(duì)每個(gè)特定的關(guān)聯(lián)進(jìn)行明確聲明。這一行為可以在運(yùn)行時(shí)通過(guò)Hibernate 查詢重載。

5.3. 二進(jìn)制流

Oracle限制通過(guò)它的JDBC驅(qū)動(dòng)傳遞的byte數(shù)組的大小。如果你希望使用很大數(shù)量的binary或者serializable 類(lèi)型的話,你需要打開(kāi)hibernate.jdbc.use_streams_for_binary這只能通過(guò)JVM級(jí)別設(shè)定

5.4. 自定義CacheProvider

通過(guò)實(shí)現(xiàn)net.sf.hibernate.cache.CacheProvider接口,你可以整合一個(gè)JVM級(jí)別(或者集群的)第二級(jí)緩存進(jìn)來(lái)。你可以通過(guò)hibernate.cache.provider_class選擇某個(gè)自定義的實(shí)現(xiàn)。

5.5. 事務(wù)策略配置

如果你希望使用Hibernate的Transaction API,你必須通過(guò)hibernate.transaction.factory_class屬性指定一個(gè)Transaction實(shí)例的工廠類(lèi)。 Transaction API隱藏了底層的事務(wù)機(jī)制,允許Hibernate代碼在受管制和非受管制的環(huán)境下都可以運(yùn)行。

內(nèi)置的兩個(gè)標(biāo)準(zhǔn)選擇是:

net.sf.hibernate.transaction.JDBCTransactionFactory

使用數(shù)據(jù)庫(kù)(JDBC)事務(wù)(默認(rèn))

net.sf.hibernate.transaction.JTATransactionFactory

使用JTA(假若已經(jīng)存在一個(gè)事務(wù),Session會(huì)在這個(gè)上下文中工作,否則會(huì)啟動(dòng)一個(gè)新的事務(wù)。)

你也可以自行定義你的事務(wù)策略(比如說(shuō),一個(gè)CORBA事務(wù)服務(wù))。

如果你希望在JTA環(huán)境中為可變數(shù)據(jù)使用JVM級(jí)別的緩存,你必須指定一個(gè)獲取JTA TransactionManager的策略,但這對(duì)J2EE容易來(lái)說(shuō)不是標(biāo)準(zhǔn)化的:

表 3.5. JTA TransactionManagers

事務(wù)工廠類(lèi) Application Server
net.sf.hibernate.transaction.JBossTransactionManagerLookup JBoss
net.sf.hibernate.transaction.WeblogicTransactionManagerLookup Weblogic
net.sf.hibernate.transaction.WebSphereTransactionManagerLookup WebSphere
net.sf.hibernate.transaction.OrionTransactionManagerLookup Orion
net.sf.hibernate.transaction.ResinTransactionManagerLookup Resin
net.sf.hibernate.transaction.JOTMTransactionManagerLookup JOTM
net.sf.hibernate.transaction.JOnASTransactionManagerLookup JOnAS
net.sf.hibernate.transaction.JRun4TransactionManagerLookup JRun4
net.sf.hibernate.transaction.BESTransactionManagerLookup Borland ES

5.6. 綁定SessionFactory到JNDI

綁定到JNDI的Hibernate SessionFactory可以簡(jiǎn)化查找工廠和創(chuàng)建新Session的過(guò)程。

假若你希望把SessionFactory綁定到一個(gè)JNDI命名空間,用hibernate.session_factory_name這個(gè)屬性指定一個(gè)名字(比如,java:comp/env/hibernate/SessionFactory)。如果這個(gè)屬性省略了,SessionFactory不會(huì)被綁定到JNDI。(在一個(gè)只讀的JNDI默認(rèn)值實(shí)現(xiàn)的環(huán)境中,這特別有用。比如,Tomcat。)

當(dāng)把SessionFactory 綁定到JNDI,Hibernate會(huì)使用hibernate.jndi.url,hibernate.jndi.class的值來(lái)獲得一個(gè)初始化上下文的實(shí)例。如果他們沒(méi)有指定,就會(huì)使用默認(rèn)的InitialContext。

如果你選擇使用JNDI,EJB或者其他工具類(lèi)就可以通過(guò)JNDI查詢得到SessionFactory。

5.7. 查詢語(yǔ)言替換

你可以使用hibernate.query.substitutions定義新的Hibernate查詢短語(yǔ)。比如說(shuō):

hibernate.query.substitutions true=1, false=0

會(huì)在生成的SQL中把短語(yǔ)truefalse替換成整數(shù)值。

hibernate.query.substitutions toLowercase=LOWER

這可以讓你重新命名SQL的LOWER函數(shù)。

6. Logging

通過(guò)Apache commons-logging,Hibernate記錄很多事件。

commons-logging服務(wù)會(huì)直接輸出到Apache log4j(如果你把log4j.jar放在你的classpath里),或者JDK1.4 logging(如果你運(yùn)行JDK 1.4或以上版本)。你可以從http://jakarta.下載log4j。要使用log4j,你需要在你的classpath中放置一個(gè)log4j.properties文件。Hibernate發(fā)行包中包含一個(gè)示例的properties配置文件。

我們強(qiáng)烈建議你熟悉Hibernate的log信息。Hibernate的很多工作都會(huì)盡量詳細(xì)的留下log,也沒(méi)有讓它變的難以閱讀。這是用來(lái)解決問(wèn)題的最基本的設(shè)施。當(dāng)然也別忘了可以如前所述打開(kāi)SQL 記錄(hibernate.show_sql),在你要解決性能問(wèn)題時(shí),這是你第一步就需要做的。

7. 實(shí)現(xiàn)NamingStrategy(命名策略)

net.sf.hibernate.cfg.NamingStrategy接口允許你對(duì)數(shù)據(jù)庫(kù)對(duì)象和schema元素指定“命名標(biāo)準(zhǔn)”。

你可以定義從Java標(biāo)識(shí)符自動(dòng)生成數(shù)據(jù)庫(kù)標(biāo)識(shí)符的規(guī)則,或者是映射文件中給出的“邏輯”字段名和表名處理為“物理”表名和字段名的規(guī)則。這個(gè)功能可以讓映射文件變得簡(jiǎn)潔,消除無(wú)用的噪音(比如TBL_前綴等)。Hibernate使用的默認(rèn)策略是幾乎什么都不做。

你可以在增加映射(add mappings)之前調(diào)用Configuration.setNamingStrategy()來(lái)指定不同的策略。

SessionFactory sf = new Configuration()
    .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)
    .addFile("Item.hbm.xml")
    .addFile("Bid.hbm.xml")
    .buildSessionFactory();

net.sf.hibernate.cfg.ImprovedNamingStrategy 是一個(gè)內(nèi)置的策略,對(duì)某些程序,你可以把它作為改造的起點(diǎn)。

8. XML配置文件

另一種配置屬性的方法是把所有的配置都放在一個(gè)名為hibernate.cfg.xml的文件中。這個(gè)文件可以被用于替代hibernate.properties文件,如果二者都出現(xiàn),它會(huì)覆蓋properties文件。

XML配置文件默認(rèn)會(huì)期望在CLASSPATH的根目錄中找到。下面是一個(gè)例子。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 2.0//EN"

 "http://hibernate./hibernate-configuration-2.0.dtd">

<hibernate-configuration>

    <!-- a SessionFactory instance listed as /jndi/name -->
    <session-factory
        name="java:comp/env/hibernate/SessionFactory">

        <!-- properties -->
        <property name="connection.datasource">my/first/datasource</property>
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">false</property>
        <property name="use_outer_join">true</property>
        <property name="transaction.factory_class">
            net.sf.hibernate.transaction.JTATransactionFactory
        </property>
        <property name="jta.UserTransaction">java:comp/UserTransaction</property>

        <!-- mapping files -->
        <mapping resource="org/hibernate/auction/Item.hbm.xml"/>
        <mapping resource="org/hibernate/auction/Bid.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

配置Hibernate只需如此簡(jiǎn)單:

SessionFactory sf = new Configuration().configure().buildSessionFactory();

你可以使用另外一個(gè)名字的XML配置文件:

SessionFactory sf = new Configuration()
    .configure("catdb.cfg.xml")
    .buildSessionFactory();

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    国产欧美日本在线播放| 免费精品国产日韩热久久| 午夜国产精品福利在线观看| 欧美日韩精品久久亚洲区熟妇人| 日本亚洲欧美男人的天堂| 欧美成人久久久免费播放| 偷拍洗澡一区二区三区| 在线日本不卡一区二区| 久一视频这里只有精品| 又黄又色又爽又免费的视频| 熟女少妇一区二区三区蜜桃| 永久福利盒子日韩日韩| 超薄丝袜足一区二区三区| 伊人国产精选免费观看在线视频| 日本国产欧美精品视频| 国产二级一级内射视频播放| 内用黄老外示儒术出处| 国内精品美女福利av在线| 精品一区二区三区不卡少妇av| 中国一区二区三区人妻| 亚洲国产成人久久一区二区三区| 欧美三级精品在线观看| 日本在线 一区 二区| 国产精品久久三级精品| 欧美字幕一区二区三区| 尤物久久91欧美人禽亚洲| 日本办公室三级在线观看| 中文字幕有码视频熟女| 国内自拍偷拍福利视频| 日韩精品小视频在线观看| 亚洲熟女一区二区三四区| 日韩欧美综合中文字幕| 国产女同精品一区二区| 小草少妇视频免费看视频| 欧美日韩亚洲精品在线观看| 日韩少妇人妻中文字幕| 五月天丁香亚洲综合网| 一区二区福利在线视频| 免费大片黄在线观看国语| 亚洲日本加勒比在线播放| 日本婷婷色大香蕉视频在线观看|