1. 關於hibernate的配置文件
配置文件中映射元素詳解
對象關系的映射是用一個XML文檔來說明的。映射文檔可以使用工具來生成,如XDoclet,Middlegen和AndroMDA等。下面從一個映射的例子開始講解映射元素,映射文件的代碼如下。
<?xml version="1.0"?>
<!--
所有的XML映射文件都需要定義如下所示的DOCTYPE。
Hibernate會先在它的類路徑(classptah)中搜索DTD文件。
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
hibernate-mapping有幾個可選的屬性:
schema屬性指明了這個映射的表所在的schema名稱。
default-cascade屬性指定了默認的級聯風格 可取值有 none、save、update。
auto-import屬性默認讓我們在查詢語言中可以使用非全限定名的類名 可取值有 true、false。
package屬性指定一個包前綴。
-->
<hibernate-mapping schema="schemaName" default-cascade="none"
auto-import="true" package="test">
<!--用class元素來定義一個持久化類 -->
<class name="People" table="person">
<!-- id元素定義了屬性到資料庫表主鍵欄位的映射。-->
<id name="id">
<!-- 用來為該持久化類的實例生成唯一的標識 -->
<generator class="native"/>
</id>
<!-- discriminator識別器 是一種定義繼承關系的映射方法-->
<discriminator column="subclass" type="character"/>
<!-- property元素為類聲明了一個持久化的,javaBean風格的屬性-->
<property name="name" type="string">
<column name="name" length="64" not-null="true" />
</property>
<property name="sex"
not-null="true"
update="false"/>
<!--多對一映射關系-->
<many-to-one name="friend"
column="friend_id"
update="false"/>
<!--設置關聯關系-->
<set name="friends" inverse="true" order-by="id">
<key column="friend_id"/>
<!—一對多映射-->
<one-to-many class="Cat"/>
</set>
</class>
</hibernate-mapping>
2. 在hibernate核心配置文件中<session-factory>下需要配置哪些<property>屬性
net.sf.hibernate.cfg.Configuration的一個實例代表了應用程序中所有的Java類到SQL資料庫的映射的集合。Configuration用於構造一個(不可變的)SessionFactory。這些映射是從一些XML映射文件中編譯得來的。
你可以得到一個Configuration的實例,直接實例化它即可。下面有一個例子,用來從兩個XML配置文件(位於classpath)中的映射中初始化:
Configuration cfg = new Configuration()
.addFile("Item.hbm.xml")
.addFile("Bid.hbm.xml");
另外一個(某些時候更好的)方法是讓Hibernate自行用getResourceAsStream()來裝載映射文件。
Configuration cfg = new Configuration()
.addClass(org.hibernate.auction.Item.class)
.addClass(org.hibernate.auction.Bid.class);
Hibernate 就會在classpath中尋找叫做/org/hibernate/autcion/Item.hbm.xml、/org/hibernate/autcion/Bid.hbm.xml的映射文件。這種方法取消了所有對文件名的硬編碼。
Configuration也可以指定一些可選的配置項:
Properties props = new Properties();
...
Configuration cfg = new Configuration()
.addClass(org.hibernate.auction.Item.class)
.addClass(org.hibernate.auction.Bid.class)
.setProperties(props);
Configuration是僅在配置期使用的對象,從第一個SessionFactory開始建立的時候,它就失效了。
2. 獲取SessionFactory
當所有的映射都被Configuration解析之後,應用程序為了得到Session實例,必須先得到它的工廠。這個工廠應該是被應用程序的所有線程共享的:
SessionFactory sessions = cfg.buildSessionFactory();
當然,Hibernate並不禁止你的程序實例化多個SessionFactory。在你使用不止一個資料庫的時候,這就有用了。
3. 用戶自行提供JDBC連接
SessionFactory可以使用一個用戶自行提供的JDBC連接來打開一個Session。這種設計可以讓應用程序來自己管理JDBC連接:
java.sql.Connection conn = datasource.getConnection();
Session session = sessions.openSession(conn);
// do some data access work
應用程序必須小心,不能在同一個連接上打開兩個並行的session!
4. Hibernate提供的JDBC連接
另一種方法就是,你可以讓SessionFactory替你打開連接。SessionFactory必須事先知道JDBC連接的參數,有幾種不同的方法設置參數:
傳遞一個java.util.Properties到Configuration.setProperties()方法。
在classpath的根目錄中提供hibernate.properties文件。
通過java -Dproperty=value指定使用系統屬性。
在hibernate.cfg.xml文件中包含<property>元素。詳情見後。
如果你使用這種方法,打開一個Session是非常簡單的:
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類中定義。我們討論一下JDBC連接配置最重要的幾項設置:
假若你設置了如下的屬性,Hibernate會使用java.sql.DriverManager來得到連接,並建立連接池:
3. hibernate怎麼讀取配置文件
Hibernate載入配置文件的兩種方法:
(一):configuration.configure();(默認載入src下的hibernate.cfg.xml文件)
代碼:
private static SessionFactory sf = null; static{
Configuration configuration = new Configuration();
configuration.configure();
sf = configuration.buildSessionFactory();
}
如果使用了這種載入方法那麼在hibernate.cfg.xml文件中就需要mapping XX.hbm.xml文件了
代碼:
<session-factory>
<mapping resource="domain/Students.hbm.xml"/>
<mapping resource="domain/Techer.hbm.xml"/></session-factory>
第二種方法使用的是con.addClass(class);方法
在test類中代碼:
private static SessionFactory sf = null; static{
Configuration configuration = new Configuration();
configuration.configure();
configuration.addClass(Techer.class);
configuration.addClass(Students.class);
sf = configuration.buildSessionFactory();
}
4. 如何在hibernate.cfg.xml中的主配置文件中配置多個映射文件
需要寫個路徑來讀spring配置文件。或者你把映射的東西拷貝到hibernate.cfg.xml中,把hibernate.cfg.xml放到src目錄下,然後運行生成資料庫表也行的。