精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Hibernate配置文件和映射元素解釋

開發(fā) 后端
對(duì)象關(guān)系的映射是用一個(gè)XML文檔來說明的。映射文檔可以使用工具來生成,如XDoclet,Middlegen和AndroMDA等。下面從一個(gè)映射的例子開始講解映射元素。
  1. <!--標(biāo)準(zhǔn)的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的編碼方式--> 
  2.                  <?xml version='1.0' encoding='gb2312'?> 
  3. <!--表明解析本XML文件的DTD文檔位置,DTD是Document Type Definition 的縮寫,即文檔類型的定義,XML解析器使用DTD文檔來檢查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3軟件包中的src/org/hibernate目錄中找到此文件--> 
  4. <!DOCTYPE hibernate-configuration PUBLIC  
  5.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  6.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
  7.     <!--聲明Hibernate配置文件的開始-->        
  8.     <hibernate-configuration> 
  9.     <!--表明以下的配置是針對(duì)session-factory配置的,SessionFactory是Hibernate中的一個(gè)類,這個(gè)類主要負(fù)責(zé)保存HIbernate的配置信息,以及對(duì)Session的操作--> 
  10.        <session-factory>      
  11.       <!--配置數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,Hibernate在連接數(shù)據(jù)庫(kù)時(shí),需要用到數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序--> 
  12.            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>   
  13.        <!--設(shè)置數(shù)據(jù)庫(kù)的連接url:jdbc:mysql://localhost/hibernate,其中l(wèi)ocalhost表示mysql服務(wù)器名稱,此處為本機(jī),     hibernate是數(shù)據(jù)庫(kù)名-->    
  14.             <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</hibernate> 
  15.     <!--連接數(shù)據(jù)庫(kù)是用戶名--> 
  16.            <property name="hibernate.connection.username">root</property>   
  17.           <!--連接數(shù)據(jù)庫(kù)是密碼--> 
  18.            <property name="hibernate.connection.password">123456</property>           
  19.           <!--數(shù)據(jù)庫(kù)連接池的大小--> 
  20.            <property name="hibernate.connection.pool.size">20</property>          
  21.          <!--是否在后臺(tái)顯示Hibernate用到的SQL語句,開發(fā)時(shí)設(shè)置為true,便于差錯(cuò),程序運(yùn)行時(shí)可以在Eclipse的控制臺(tái)顯示Hibernate的執(zhí)行Sql語句。項(xiàng)目部署后可以設(shè)置為false,提高運(yùn)行效率--> 
  22.          <property name="hibernate.show_sql">true</property> 
  23.          <!--jdbc.fetch_size是指Hibernate每次從數(shù)據(jù)庫(kù)中取出并放到JDBC的Statement中的記錄條數(shù)。Fetch Size設(shè)的越大,讀數(shù)據(jù)庫(kù)的次數(shù)越少,速度越快,F(xiàn)etch Size越小,讀數(shù)據(jù)庫(kù)的次數(shù)越多,速度越慢--> 
  24.          <property name="jdbc.fetch_size">50</property> 
  25.          <!--jdbc.batch_size是指Hibernate批量插入,刪除和更新時(shí)每次操作的記錄數(shù)。Batch Size越大,批量操作的向數(shù)據(jù)庫(kù)發(fā)送Sql的次數(shù)越少,速度就越快,同樣耗用內(nèi)存就越大--> 
  26.          <property name="jdbc.batch_size">23</property> 
  27.          <!--jdbc.use_scrollable_resultset是否允許Hibernate用JDBC的可滾動(dòng)的結(jié)果集。對(duì)分頁(yè)的結(jié)果集。對(duì)分頁(yè)時(shí)的設(shè)置非常有幫助--> 
  28.          <property name="jdbc.use_scrollable_resultset">false</property> 
  29.          <!--connection.useUnicode連接數(shù)據(jù)庫(kù)時(shí)是否使用Unicode編碼--> 
  30.          <property name="Connection.useUnicode">true</property> 
  31.          <!--connection.characterEncoding連接數(shù)據(jù)庫(kù)時(shí)數(shù)據(jù)的傳輸字符集編碼方式,最好設(shè)置為gbk,用gb2312有的字符不全--> 
  32.     <property name="connection.characterEncoding">gbk</property>        
  33.            
  34.          <!--hibernate.dialect 只是Hibernate使用的數(shù)據(jù)庫(kù)方言,就是要用Hibernate連接那種類型的數(shù)據(jù)庫(kù)服務(wù)器。--> 
  35.            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
  36.          <!--指定映射文件為“hibernate/ch1/UserInfo.hbm.xml”-->           
  37.            <mapping resource="org/mxg/UserInfo.hbm.xml"> 
  38.   </session-factory> 
  39.   </hibernate-configuration> 

 配置文件中映射元素詳解

對(duì)象關(guān)系的映射是用一個(gè)XML文檔來說明的。映射文檔可以使用工具來生成,如XDoclet,Middlegen和AndroMDA等。下面從一個(gè)映射的例子開始講解映射元素,映射文件的代碼如下。

  1. <?xml version="1.0"?>  
  2. <!--  
  3. 所有的XML映射文件都需要定義如下所示的DOCTYPE。  
  4. Hibernate會(huì)先在它的類路徑(classptah)中搜索DTD文件。  
  5. -->  
  6. <!DOCTYPE hibernate-mapping PUBLIC  
  7. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  8. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  9. <!--  
  10. hibernate-mapping有幾個(gè)可選的屬性:  
  11. schema屬性指明了這個(gè)映射的表所在的schema名稱。  
  12. default-cascade屬性指定了默認(rèn)的級(jí)聯(lián)風(fēng)格 可取值有 none、save、update。  
  13. auto-import屬性默認(rèn)讓我們?cè)诓樵冋Z言中可以使用非全限定名的類名 可取值有 true、false。  
  14. package屬性指定一個(gè)包前綴。  
  15. -->  
  16. <hibernate-mapping schema="schemaName" default-cascade="none" 
  17. auto-import="true" package="test">  
  18. <!--用class元素來定義一個(gè)持久化類 -->  
  19. <class name="People" table="person">  
  20. <!-- id元素定義了屬性到數(shù)據(jù)庫(kù)表主鍵字段的映射。-->  
  21. <id name="id">  
  22. <!-- 用來為該持久化類的實(shí)例生成唯一的標(biāo)識(shí) -->  
  23. <generator class="native"/>  
  24. </id>  
  25. <!-- discriminator識(shí)別器 是一種定義繼承關(guān)系的映射方法-->  
  26. <discriminator column="subclass" type="character"/>  
  27. <!-- property元素為類聲明了一個(gè)持久化的,JavaBean風(fēng)格的屬性-->  
  28. <property name="name" type="string">  
  29. <column name="name" length="64" not-null="true" />  
  30. </property>  
  31. <property name="sex" 
  32. not-null="true" 
  33. update="false"/>  
  34. <!--多對(duì)一映射關(guān)系-->  
  35. <many-to-one name="friend" 
  36. column="friend_id" 
  37. update="false"/>  
  38. <!--設(shè)置關(guān)聯(lián)關(guān)系-->  
  39. <set name="friends" inverse="true" order-by="id">  
  40. <key column="friend_id"/>  
  41. <!—一對(duì)多映射-->  
  42. <o(jì)ne-to-many class="Cat"/>  
  43. </set>  
  44. </class>  
  45. </hibernate-mapping> 

組件應(yīng)用的方法

組件有兩種類型,即組件(component)和動(dòng)態(tài)組件(dynamic-component)。在配置文件中,component元素為子對(duì)象的元素與父類對(duì)應(yīng)表的字段建立起映射關(guān)系。然后組件可以聲明它們自己的屬性、組件或者集合。component元素的定義如下所示:

  1. <component name="propertyName" class="className" insert="true|false" 
  2. upate="true|false" access="field|property|ClassName">  
  3. <property ...../>  
  4. <many-to-one .... />  
  5. ........  
  6. </component>  

在這段代碼中,name是指屬性名,class是類的名字,insert指的是被映射的字段是否出現(xiàn)在SQL的INSERT語句中,upate指出被映射的字段是否出現(xiàn)在SQL的UPDATE語句中,access指出訪問屬性的策略。

Hiebernate的基本配置

Hibernate的數(shù)據(jù)庫(kù)連接信息是從配置文件中加載的。Hibernate的配置文件有兩種形式:一種是XML格式的文件,一種是properties屬性文件。properties形式的配置文件默認(rèn)文件名是hibernate.properties,一個(gè)properties形式的配置文件內(nèi)容如下所示:

  1. #指定數(shù)據(jù)庫(kù)使用的驅(qū)動(dòng)類  
  2. hibernate.connection.driver_class = com.mysql.jdbc.Driver r  
  3. #指定數(shù)據(jù)庫(kù)連接串  
  4. hibernate.connection.url = jdbc:mysql://localhost:3306/db  
  5. #指定數(shù)據(jù)庫(kù)連接的用戶名  
  6. hibernate.connection.username = user 
  7. #指定數(shù)據(jù)庫(kù)連接的密碼  
  8. hibernate.connection.password = password 
  9. #指定數(shù)據(jù)庫(kù)使用的方言  
  10. hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect  
  11. #指定是否打印SQL語句  
  12. hibernate.show_sql=true 

在配置文件中包含了一系列屬性的配置,Hibernate將根據(jù)這些屬性來連接數(shù)據(jù)庫(kù)。

在XML格式的配置文件中,除了基本的Hibernate配置信息,還可以指定具體的持久化類的映射文件,這可以避免將持久化類的配置文件硬編碼在程序中。XML格式的配置文件的默認(rèn)文件名為hibernate.cfg.xml,一個(gè)XML配置文件的示例如下所示:

  1. <?xml version=''1.0'' encoding=''UTF-8''?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5. <hibernate-configuration>  
  6. <session-factory>  
  7. <!--顯示執(zhí)行的SQL語句-->  
  8. <property name="show_sql">true</property>  
  9. <!--連接字符串-->  
  10. <property name="connection.url">jdbc:mysql://localhost:3306/STU</property>  
  11. <!--連接數(shù)據(jù)庫(kù)的用戶名-->  
  12. <property name="connection.username">root</property>  
  13. <!--數(shù)據(jù)庫(kù)用戶密碼-->  
  14. <property name="connection.password">root</property>  
  15. <!--數(shù)據(jù)庫(kù)驅(qū)動(dòng)-->  
  16. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  17. <!--選擇使用的方言-->  
  18. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  19. <!--映射文件 -->  
  20. <mapping resource="com/stuman/domain/Admin.hbm.xml" />  
  21. <!--映射文件-->  
  22. <mapping resource="com/stuman/domain/Student.hbm.xml" />  
  23. </session-factory>  
  24. </hibernate-configuration>  

properties形式的配置文件和XML格式的配置文件可以同時(shí)使用。當(dāng)同時(shí)使用兩種類型的配置文件時(shí),XML配置文件中的設(shè)置會(huì)覆蓋properties配置文件的相同的屬性。

對(duì)象標(biāo)識(shí)符號(hào)

在關(guān)系數(shù)據(jù)庫(kù)表中,主鍵(Primary Key)用來識(shí)別記錄,并保證每條記錄的唯一性。在Java語言中,通過比較兩個(gè)變量所引用對(duì)象的內(nèi)存地址是否相同,或者比較兩個(gè)變量引用的對(duì)象值是否相同來判斷兩對(duì)象是否相等。Hibernate為了解決兩者之間的不同,使用對(duì)象標(biāo)識(shí)符(OID)來標(biāo)識(shí)對(duì)象的唯一性。OID是關(guān)系數(shù)據(jù)庫(kù)中主鍵在Java對(duì)象模型中的等價(jià)物。在運(yùn)行時(shí),Hibernate根據(jù)OID來維持Java對(duì)象和數(shù)據(jù)庫(kù)表中記錄的對(duì)應(yīng)關(guān)系。如下代碼所示,三次調(diào)用了Session的load()方法,分別加載OID為1或3的User對(duì)象。

  1. Transaction tx = session.beginTransaction();  
  2. User user1 = (User)session.load(User.class,new Long(1));  
  3. User user2 = (User)session.load(User.class,new Long(1));  
  4. User user3 = (User)session.load(User.class,new Long(3));  
  5. System.out.println( user1 == user2 );  
  6. System.out.println( user1 == user3 );  

應(yīng)用程序在執(zhí)行上述代碼時(shí),第一次加載OID為1的User對(duì)象,從數(shù)據(jù)庫(kù)中查找ID為1的記錄,然后創(chuàng)建相應(yīng)的User實(shí)例,并把它保存在Session緩存中,最后將該實(shí)例的引用賦值給變量user1。第二次加載OID為1的對(duì)象時(shí),直接把Session緩存中OID為1的實(shí)例的引用賦值給變量user2。因此,表達(dá)式user1==user2的結(jié)果為true。

標(biāo)識(shí)的生成可以使用不同的策略,表1為Hibernate內(nèi)置的標(biāo)識(shí)生成策略。

表1:Hibernate標(biāo)識(shí)生成策略

標(biāo)識(shí)符生成器

描述

increment

適用于代理主鍵。由Hibernate自動(dòng)以遞增方式生成。

identity

適用于代理主鍵。由底層數(shù)據(jù)庫(kù)生成標(biāo)識(shí)符。

sequence

適用于代理主鍵。Hibernate根據(jù)底層數(shù)據(jù)庫(kù)的序列生成標(biāo)識(shí)符,這要求底層數(shù)據(jù)庫(kù)支持序列。

hilo

適用于代理主鍵。Hibernate分局high/low算法生成標(biāo)識(shí)符。

seqhilo

適用于代理主鍵。使用一個(gè)高/低位算法來高效的生成long,short或者int類型的標(biāo)識(shí)符。

native

適用于代理主鍵。根據(jù)底層數(shù)據(jù)庫(kù)對(duì)自動(dòng)生成標(biāo)識(shí)符的方式,自動(dòng)選擇identity、sequence或hilo。

uuid.hex

適用于代理主鍵。Hibernate采用128位的UUID算法生成標(biāo)識(shí)符。

uuid.string

適用于代理主鍵。UUID被編碼成一個(gè)16字符長(zhǎng)的字符串。

assigned

適用于自然主鍵。由Java應(yīng)用程序負(fù)責(zé)生成標(biāo)識(shí)符。

foreign

適用于代理主鍵。使用另外一個(gè)相關(guān)聯(lián)的對(duì)象的標(biāo)識(shí)符。

Hibernate映射類型

在對(duì)象/關(guān)系映射文件中,Hibernate采用映射類型作為Java類型和SQL類型的橋梁。Hibernate映射類型分為2種:內(nèi)置映射類型和自定義映射類型。

1、內(nèi)置映射類型

Hibernate對(duì)所有的Java原生類型、常用的Java類型如String、Date等都定義了內(nèi)置的映射類型。表2列出了Hibernate映射類型、對(duì)應(yīng)的Java類型以及對(duì)應(yīng)的標(biāo)準(zhǔn)SQL類型。

表2:Hibernate內(nèi)置映射類型

Hibernate映射類型 Java類型 標(biāo)準(zhǔn)SQL類型 大小
integer/int java.lang.Integer/int INTEGER 4字節(jié)
long java.lang.Long/long BIGINT 8字節(jié)
short java.lang.Short/short SMALLINT 2字節(jié)
byte java.lang.Byte/byte TINYINT 1字節(jié)
float java.lang.Float/float FLOAT 4字節(jié)
double java.lang.Double/double DOUBLE 8字節(jié)
big_decimal java.math.BigDecimal NUMERIC  
character java.lang.Character/java.lang.String/char CHAR(1) 定長(zhǎng)字符
string java.lang.String VARCHAR 變長(zhǎng)字符
boolean/ yes_no/true_false java.lang.Boolean/Boolean BIT 布爾類型
date java.util.Date/java.sql.Date DATE 日期
timestamp java.util.Date/java.util.Timestamp TIMESTAMP 日期
calendar java.util.Calendar TIMESTAMP 日期
calendar_date java.util.Calendar DATE 日期
binary byte[] BLOB

BLOB
text java.lang.String TEXT CLOB
serializable 實(shí)現(xiàn)java.io.Serializablej接口的任意Java類 BLOB BLOB
clob java.sql.Clob CLOB CLOB
blob java.sql.Blob BLOB BLOB
class java.lang.Class VARCHAR 定長(zhǎng)字符
locale java.util.Locale VARCHAR 定長(zhǎng)字符
timezone java.util.TimeZone VARCHAR 定長(zhǎng)字符
currency java.util.Currency VARCHAR 定長(zhǎng)字符

hibernate-mapping

這個(gè)元素包括三個(gè)可選的屬性。schema屬性,指明了這個(gè)映射所引用的表所在的schema名稱。假若指定了這個(gè)屬性,表名會(huì)加上所指定的schema的名字?jǐn)U展為全限定名。假若沒有指定,表名就不會(huì)使用全限定名。default-cascade指定了未明確注明cascade屬性的Java屬性和集合類Java會(huì)采取什么樣的默認(rèn)級(jí)聯(lián)風(fēng)格。auto-import屬性默認(rèn)讓我們?cè)诓樵冋Z言中可以使用非全限定名的類名。

  1. <hibernate-mapping  
  2.          schema="schemaName"                           
  3.          default-cascade="none|save-update"            
  4.          auto-import="true|false"                      
  5.          package="package.name"                        
  6.  /> 

schema (可選): 數(shù)據(jù)庫(kù)schema名稱。

default-cascade (可選 - 默認(rèn)為 none): 默認(rèn)的級(jí)聯(lián)風(fēng)格。

auto-import (可選 - 默認(rèn)為 true): 指定是否我們可以在查詢語言中使用非全限定的類名(僅限于本映射文件中的類)。

package (可選): 指定一個(gè)包前綴,如果在映射文檔中沒有指定全限定名,就使用這個(gè)包名。

假若你有兩個(gè)持久化類,它們的非全限定名是一樣的(就是在不同的包里面--譯者注),你應(yīng)該設(shè)置auto-import="false"。假若說你把一個(gè)“import過”的名字同時(shí)對(duì)應(yīng)兩個(gè)類, Hibernate會(huì)拋出一個(gè)異常。

5.1.3. class

你可以使用class元素來定義一個(gè)持久化類:

  1. <class 
  2.         name="ClassName"                               
  3.         table="tableName"                              
  4.         discriminator-value="discriminator_value"      
  5.         mutable="true|false"                           
  6.         schema="owner"                                 
  7.         proxy="ProxyInterface"                         
  8.         dynamic-update="true|false"                    
  9.         dynamic-insert="true|false"                    
  10.         select-before-update="true|false"              
  11.         polymorphism="implicit|explicit"               
  12.         where="arbitrary sql where condition"         (11)  
  13.         persister="PersisterClass"                    (12)  
  14.         batch-size="N"                                (13)  
  15.         optimistic-lock="none|version|dirty|all"      (14)  
  16.         lazy="true|false"                             (15)  
  17. /> 

name: 持久化類(或者接口)的Java全限定名。

table: 對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名。

discriminator-value(辨別值) (可選 - 默認(rèn)和類名一樣):一個(gè)用于區(qū)分不同的子類的值,在多態(tài)行為時(shí)使用。

mutable(可變) (可選, 默認(rèn)值為 true): 表明該類的實(shí)例可變(不可變)。

schema (可選): 覆蓋在根<hibernate-mapping>元素中指定的schema名字。

proxy (可選): 指定一個(gè)接口,在延遲裝載時(shí)作為代理使用。你可以在這里使用該類自己的名字。

dynamic-update(動(dòng)態(tài)更新) (可選,默認(rèn)為false): 指定用于UPDATE 的SQL將會(huì)在運(yùn)行時(shí)動(dòng)態(tài)生成,并且只更新那些改變過的字段。

dynamic-insert(動(dòng)態(tài)插入) (可選, 默認(rèn)為false): 指定用于INSERT的 SQL 將會(huì)在運(yùn)行時(shí)動(dòng)態(tài)生成,并且只包含那些非空值字段。

select-before-update (可選,默認(rèn)值為false): 指定Hibernate除非確定對(duì)象的確被修改了,不會(huì)執(zhí)行SQL UPDATE操作。在特定場(chǎng)合(實(shí)際上,只會(huì)發(fā)生在一個(gè)臨時(shí)對(duì)象關(guān)聯(lián)到一個(gè)新的session中去,執(zhí)行update()的時(shí)候),這說明Hibernate會(huì)在UPDATE之前執(zhí)行一次額外的SQL SELECT操作,來決定是否應(yīng)該進(jìn)行UPDATE。

polymorphism(多形,多態(tài)) (可選, 默認(rèn)值為 implicit (隱式)): 界定是隱式還是顯式的使用查詢多態(tài)。

(11) where (可選) 指定一個(gè)附加的SQLWHERE 條件,在抓取這個(gè)類的對(duì)象時(shí)會(huì)一直增加這個(gè)條件。

(12) persister (可選): 指定一個(gè)定制的ClassPersister。

(13) batch-size (可選,默認(rèn)是1) 指定一個(gè)用于根據(jù)標(biāo)識(shí)符抓取實(shí)例時(shí)使用的"batch size"(批次抓取數(shù)量)。

(14) optimistic-lock(樂觀鎖定) (可選,默認(rèn)是version): 決定樂觀鎖定的策略。

(15) lazy(延遲) (可選): 假若設(shè)置 lazy="true",就是設(shè)置這個(gè)類自己的名字作為proxy接口的一種等價(jià)快捷形式。

若指明的持久化類實(shí)際上是一個(gè)接口,也可以被完美地接受。其后你可以用<subclass>來指定該接口的實(shí)際實(shí)現(xiàn)類名。你可以持久化任何static(靜態(tài)的)內(nèi)部類。記得應(yīng)該使用標(biāo)準(zhǔn)的類名格式,就是說比如:Foo$Bar。

不可變類,mutable="false"不可以被應(yīng)用程序更新或者刪除。這可以讓Hibernate做一些小小的性能優(yōu)化。

可選的proxy屬性可以允許延遲加載類的持久化實(shí)例。Hibernate開始會(huì)返回實(shí)現(xiàn)了這個(gè)命名接口的CGLIB代理。當(dāng)代理的某個(gè)方法被實(shí)際調(diào)用的時(shí)候,真實(shí)的持久化對(duì)象才會(huì)被裝載。參見下面的“用于延遲裝載的代理”。

Implicit (隱式)的多態(tài)是指,如果查詢中給出的是任何超類、該類實(shí)現(xiàn)的接口或者該類的名字,都會(huì)返回這個(gè)類的實(shí)例;如果查詢中給出的是子類的名字,則會(huì)返回子類的實(shí)例。 Explicit (顯式)的多態(tài)是指,只有在查詢中給出的明確是該類的名字時(shí)才會(huì)返回這個(gè)類的實(shí)例;同時(shí)只有當(dāng)在這個(gè)<class>的定義中作為<subclass>或者<joined-subclass>出現(xiàn)的子類,才會(huì)可能返回。大多數(shù)情況下,默認(rèn)的polymorphism="implicit"都是合適的。顯式的多態(tài)在有兩個(gè)不同的類映射到同一個(gè)表的時(shí)候很有用。(允許一個(gè)“輕型”的類,只包含部分表字段)。

persister屬性可以讓你定制這個(gè)類使用的持久化策略。你可以指定你自己實(shí)現(xiàn)的net.sf.hibernate.persister.EntityPersister的子類,你甚至可以完全從頭開始編寫一個(gè)net.sf.hibernate.persister.ClassPersister接口的實(shí)現(xiàn),可能是用儲(chǔ)存過程調(diào)用、序列化到文件或者LDAP數(shù)據(jù)庫(kù)來實(shí)現(xiàn)的。參閱net.sf.hibernate.test.CustomPersister,這是一個(gè)簡(jiǎn)單的例子(“持久化”到一個(gè)Hashtable)。

請(qǐng)注意dynamic-update和dynamic-insert的設(shè)置并不會(huì)繼承到子類,所以在<subclass>或者<joined-subclass>元素中可能需要再次設(shè)置。這些設(shè)置是否能夠提高效率要視情形而定。請(qǐng)用你的智慧決定是否使用。

使用select-before-update通常會(huì)降低性能.當(dāng)是在防止數(shù)據(jù)庫(kù)不必要的觸發(fā)update觸發(fā)器,這就很有用了。

如果你打開了dynamic-update,你可以選擇幾種樂觀鎖定的策略:

version(版本檢查)檢查version/timestamp字段

all(全部) 檢查全部字段

dirty(臟檢查)只檢察修改過的字段

none(不檢查)不使用樂觀鎖定

我們非常強(qiáng)烈建議你在Hibernate中使用version/timestamp字段來進(jìn)行樂觀鎖定。對(duì)性能來說,這是最好的選擇,并且這也是唯一能夠處理在session外進(jìn)行操作的策略(就是說,當(dāng)使用Session.update()的時(shí)候)。

5.1.4. id

被映射的類必須聲明對(duì)應(yīng)數(shù)據(jù)庫(kù)表主鍵字段。大多數(shù)類有一個(gè)JavaBeans風(fēng)格的屬性,為每一個(gè)實(shí)例包含唯一的標(biāo)識(shí)。<id> 元素定義了該屬性到數(shù)據(jù)庫(kù)表主鍵字段的映射。

  1. <id  
  2. name="propertyName"   
  3. type="typename"   
  4. column="column_name"   
  5. unsaved-value="any|none|null|id_value"   
  6. access="field|property|ClassName">   
  7.  
  8. <generator class="generatorClass"/>  
  9. </id> 

name (可選): 標(biāo)識(shí)屬性的名字。

type (可選): 標(biāo)識(shí)Hibernate類型的名字。

column (可選 - 默認(rèn)為屬性名): 主鍵字段的名字。

unsaved-value (可選 - 默認(rèn)為null): 一個(gè)特定的標(biāo)識(shí)屬性值,用來標(biāo)志該實(shí)例是剛剛創(chuàng)建的,尚未保存。這可以把這種實(shí)例和從以前的session中裝載過(可能又做過修改--譯者注)但未再次持久化的實(shí)例區(qū)分開來。

access (可選 - 默認(rèn)為property): Hibernate用來訪問屬性值的策略。

如果 name屬性不存在,會(huì)認(rèn)為這個(gè)類沒有標(biāo)識(shí)屬性。

unsaved-value 屬性很重要!如果你的類的標(biāo)識(shí)屬性不是默認(rèn)為null的,你應(yīng)該指定正確的默認(rèn)值。

還有一個(gè)另外的<composite-id>聲明可以訪問舊式的多主鍵數(shù)據(jù)。我們強(qiáng)烈不鼓勵(lì)使用這種方式。

5.1.4.1. generator

必須聲明的<generator>子元素是一個(gè)Java類的名字,用來為該持久化類的實(shí)例生成唯一的標(biāo)識(shí)。如果這個(gè)生成器實(shí)例需要某些配置值或者初始化參數(shù),用<param>元素來傳遞。

  1. <id name="id" type="long" column="uid" unsaved-value="0"> 
  2. <generator class="net.sf.hibernate.id.TableHiLoGenerator"> 
  3. <param name="table">uid_table</param> 
  4. <param name="column">next_hi_value_column</param> 
  5. </generator> 
  6. </id> 

所有的生成器都實(shí)現(xiàn)net.sf.hibernate.id.IdentifierGenerator接口。這是一個(gè)非常簡(jiǎn)單的接口;某些應(yīng)用程序可以選擇提供他們自己特定的實(shí)現(xiàn)。當(dāng)然,Hibernate提供了很多內(nèi)置的實(shí)現(xiàn)。下面是一些內(nèi)置生成器的快捷名字:

increment(遞增)

用于為long, short或者int類型生成唯一標(biāo)識(shí)。只有在沒有其他進(jìn)程往同一張表中插入數(shù)據(jù)時(shí)才能使用。在集群下不要使用。

identity

對(duì)DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的內(nèi)置標(biāo)識(shí)字段提供支持。返回的標(biāo)識(shí)符是long, short 或者int類型的。

sequence (序列)

在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的標(biāo)識(shí)符是long, short或者 int類型的。

hilo (高低位)

使用一個(gè)高/低位算法來高效的生成long, short或者 int類型的標(biāo)識(shí)符。給定一個(gè)表和字段(默認(rèn)分別是是hibernate_unique_key 和next)作為高位值得來源。高/低位算法生成的標(biāo)識(shí)符只在一個(gè)特定的數(shù)據(jù)庫(kù)中是唯一的。在使用JTA獲得的連接或者用戶自行提供的連接中,不要使用這種生成器。

seqhilo(使用序列的高低位)

使用一個(gè)高/低位算法來高效的生成long, short或者 int類型的標(biāo)識(shí)符,給定一個(gè)數(shù)據(jù)庫(kù)序列(sequence)的名字。

uuid.hex

用一個(gè)128-bit的UUID算法生成字符串類型的標(biāo)識(shí)符。在一個(gè)網(wǎng)絡(luò)中唯一(使用了IP地址)。UUID被編碼為一個(gè)32位16進(jìn)制數(shù)字的字符串。

uuid.string

使用同樣的UUID算法。UUID被編碼為一個(gè)16個(gè)字符長(zhǎng)的任意ASCII字符組成的字符串。不能使用在PostgreSQL數(shù)據(jù)庫(kù)中

native(本地)

根據(jù)底層數(shù)據(jù)庫(kù)的能力選擇identity, sequence 或者h(yuǎn)ilo中的一個(gè)。

assigned(程序設(shè)置)

讓應(yīng)用程序在save()之前為對(duì)象分配一個(gè)標(biāo)示符。

foreign(外部引用)

使用另外一個(gè)相關(guān)聯(lián)的對(duì)象的標(biāo)識(shí)符。和<one-to-one>聯(lián)合一起使用。

原文鏈接:http://blog.csdn.net/ysynlm/article/details/2766281

【編輯推薦】

  1. 詳解Hibernate攔截器與事件監(jiān)聽器
  2. Hibernate的緩存解讀
  3. Hibernate的集合映射
  4. Hibernate關(guān)聯(lián)關(guān)系配置
  5. Hibernate中inverse屬性與cascade屬性
責(zé)任編輯:林師授 來源: ysynlm的博客
相關(guān)推薦

2009-09-22 10:23:15

Hibernate配置

2009-09-25 10:49:25

Hibernate加載

2009-09-29 17:29:43

Hibernate S

2009-09-27 13:25:22

2009-09-29 15:52:26

Hibernate X

2009-09-23 17:34:18

Hibernate映射

2009-09-29 15:58:22

Hibernate映射

2009-09-28 14:54:33

Hibernate映射

2009-06-23 18:19:32

單元測(cè)試Hibernate配置

2009-06-02 14:12:26

Hibernate配置文件格式

2012-03-19 16:27:05

JavaHibernate

2009-06-24 14:17:00

BackingBeanJSF配置文件

2011-02-21 10:31:54

Postfix命令配置

2012-02-02 16:13:29

HibernateJava

2009-09-23 08:56:18

Hibernate cHibernate i

2011-04-19 14:35:58

ASP.NETWeb.config

2021-06-15 18:42:53

Rollup配置 JavaScript

2012-02-03 10:07:04

HibernateJava

2009-09-25 10:00:47

Hibernate映射

2012-02-03 11:17:33

HibernateJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

精品视频1区2区| 久久久久久久久久久黄色| 欧美另类第一页| 人妻换人妻a片爽麻豆| 欧美xo影院| 一区二区三区四区不卡在线 | 国产精品乱战久久久| 精品福利一区二区| 自拍亚洲欧美老师丝袜| 亚洲aⅴ乱码精品成人区| 老司机一区二区| 久久青草福利网站| 色偷偷男人天堂| 老牛国内精品亚洲成av人片| 欧美色综合久久| 九色自拍视频在线观看| 日韩免费啪啪| 99国产精品久久久久| 国产日韩在线一区| 亚洲影院在线播放| 欧美日本三区| 色综久久综合桃花网| 女同性恋一区二区三区| 精品乱码一区二区三区四区| 红桃视频成人在线观看| 国产盗摄视频在线观看| 国产精品秘入口| 99久久久无码国产精品| 97超级碰碰| 一级久久久久久久| 日韩精品三区四区| 97在线视频免费看| 中文字幕在线有码| 日本久久综合| 亚洲天堂成人在线| 亚洲天堂成人av| 韩国精品福利一区二区三区| 欧美一区二区三区视频免费 | 人人干人人干人人干| 中文一区一区三区免费在线观看| 这里只有精品在线播放| 久久精品成人av| 日韩av三区| 亚洲国产免费av| 欧美激情一区二区三区p站| 在线日韩三级| 欧美男同性恋视频网站| 亚洲精品久久久中文字幕| 欧洲av不卡| 狠狠躁夜夜躁人人爽天天天天97 | 欧美一区二区三区思思人| 小明看看成人免费视频| 成人涩涩视频| 欧美网站一区二区| 999精彩视频| 国产精品久久久久久久久久齐齐| 色呦呦日韩精品| 男女午夜激情视频| 不卡av播放| 色一区在线观看| 亚欧在线免费观看| 日本黄色一区| 欧美男生操女生| 国产精品嫩草影视| 成人免费在线电影网| 精品国产免费一区二区三区四区| 久久久久无码国产精品一区李宗瑞| 亚洲免费一区三区| 欧美va亚洲va在线观看蝴蝶网| 4438x全国最大成人| 超碰97久久| 精品无人区太爽高潮在线播放| 91中文字幕永久在线| 欧美理论电影大全| 久久九九免费视频| 免费在线观看日韩| 欧美亚洲三级| 国产精品爽爽爽| www.久久精品.com| 99久久国产免费看| 手机在线观看国产精品| 黄网站在线免费| 亚洲一区二区三区美女| 国产成人无码精品久久久性色| 99re66热这里只有精品4| 欧美日韩五月天| 又色又爽又黄18网站| 少妇精品导航| 日韩在线播放av| 国产大片aaa| 热久久国产精品| 99超碰麻豆| 国产精品一区二区三区四区色| 亚洲色图19p| 国产aaa免费视频| 国产精品毛片久久久久久久久久99999999 | 亚洲欧美在线网| а_天堂中文在线| 欧美色区777第一页| 三大队在线观看| 精品国内自产拍在线观看视频| 久久国产精品久久国产精品| 欧美h在线观看| 国产在线国偷精品产拍免费yy| 国产午夜精品在线| 国产理论在线观看| 欧洲精品中文字幕| 日韩综合第一页| 久久精品国产大片免费观看| 性欧美xxxx| 国产伦一区二区| 日本一区二区视频在线| 国产xxxx振车| 欧美高清影院| 亚洲视频电影图片偷拍一区| 国产一级一片免费播放| 国产综合成人久久大片91| 日本日本精品二区免费| av女在线播放| 日韩精品一区二区三区四区| 91无套直看片红桃在线观看| 香蕉成人久久| 国产精品日韩欧美一区二区三区| 激情在线小视频| 欧美日韩免费在线视频| 国产成人精品无码免费看夜聊软件| 国内一区二区三区| 亚洲伊人成综合成人网| √新版天堂资源在线资源| 日韩欧美一区二区在线| 欧美深性狂猛ⅹxxx深喉| 欧美激情综合色综合啪啪| 成人国内精品久久久久一区| 国产私人尤物无码不卡| 欧美性色xo影院| 黄色性生活一级片| 国产日韩欧美三区| 精品乱色一区二区中文字幕| 久草在线资源站资源站| 69堂精品视频| 老妇女50岁三级| 国产精品自在欧美一区| 久久久成人精品一区二区三区| 福利一区二区免费视频| 在线中文字幕日韩| 在线观看毛片视频| 国产精品毛片久久久久久| 视色视频在线观看| 欧美oldwomenvideos| 成人国产在线激情| 99福利在线| 日韩精品一区二区三区蜜臀| 国产精品成人免费观看| 国产成人av在线影院| 日本老太婆做爰视频| 亚洲国产视频二区| 久久久久免费精品国产| 人妻视频一区二区三区| 欧美丝袜一区二区三区| 亚洲调教欧美在线| 媚黑女一区二区| 亚洲丰满在线| 国产精品视频首页| 韩国三级日本三级少妇99| 天天综合永久入口| 日本韩国精品在线| 亚洲熟女少妇一区二区| 国产真实乱子伦精品视频| 99视频精品全部免费看| 黄色免费大全亚洲| 日本欧美爱爱爱| 在线免费观看的av网站| 欧美一级二级在线观看| 国产一级特黄a高潮片| 久久综合久色欧美综合狠狠| 亚洲第一狼人区| 欧美精品自拍| 明星裸体视频一区二区| 亚洲人成777| 97国产精品视频人人做人人爱| 欧美男男同志| 67194成人在线观看| 国产精品1000| 国产精品福利一区二区| 国产精九九网站漫画| 久久天天综合| 欧美性猛交内射兽交老熟妇| 中文字幕中文字幕精品| 91免费国产网站| 涩涩视频网站在线观看| 色偷偷9999www| 午夜福利一区二区三区| 欧美日韩国产高清一区二区三区 | 先锋影音日韩| 91精品国产自产在线丝袜啪| 国产成人精品久久| 国产盗摄一区二区| 综合国产在线视频| 亚洲 精品 综合 精品 自拍| 精品视频一区 二区 三区| 亚洲精品午夜久久久久久久| 中文字幕乱码一区二区免费| 超碰caoprom| 精品一区二区三区免费播放| 鲁一鲁一鲁一鲁一澡| 综合激情网站| 亚洲人成77777| 日韩黄色网络| 国产精品国产精品国产专区不卡| 香蕉成人影院| 欧美亚洲视频在线看网址| 手机在线免费看av| 色av中文字幕一区| 国产爆初菊在线观看免费视频网站| 日韩精品一区二区三区在线观看| 在线免费看91| 在线视频国产一区| 国产黄色片免费看| 亚洲午夜久久久久久久久电影网 | 国产一二三区在线视频| 精品国产91洋老外米糕| 国产乱码一区二区| 欧美三级日韩三级| 国产suv精品一区二区33| 亚洲国产裸拍裸体视频在线观看乱了| 国产乱子轮xxx农村| 欧美激情在线看| 一本色道久久综合亚洲精品图片| 成人黄页毛片网站| 亚洲美女精品视频| 国产成人精品影院| 91福利视频免费观看| 韩日av一区二区| 久久久久xxxx| 精品亚洲国产成人av制服丝袜| www日韩在线观看| 美女视频一区免费观看| 国产精品无码专区av在线播放| 精品成人免费| 无码人妻精品一区二区三区在线| 国内精品亚洲| 秋霞无码一区二区| 亚洲激情不卡| 黄www在线观看| 亚洲欧美日韩专区| 女人另类性混交zo| 日韩精品成人一区二区三区| 999精品网站| 日本亚洲欧美天堂免费| 国产精品视频中文字幕| 久久精品理论片| 999热精品视频| 成人一区二区三区在线观看| 青青草视频网站| 久久综合色婷婷| 国产精品成人无码免费| 中文字幕精品三区| 顶级黑人搡bbw搡bbbb搡| 亚洲美女少妇撒尿| 国产一级av毛片| 黑人巨大精品欧美一区二区免费| 婷婷激情五月网| 欧美无砖砖区免费| 国产黄色高清视频| 亚洲精品成人久久电影| 免费在线国产| 久久精品国产久精国产一老狼| 香蕉成人app免费看片| 久久久女女女女999久久| 亚洲少妇视频| 国产日韩换脸av一区在线观看| 精品一区二区三区视频在线播放| 国产精品我不卡| 国产伦精品一区二区三区千人斩| 一本久久a久久精品vr综合 | 九九综合九九综合| 色网在线免费观看| 国产日韩av高清| 久久精品国产亚洲blacked| 茄子视频成人在线观看| 午夜国产一区二区| 很污的网站在线观看| 天使萌一区二区三区免费观看| 亚洲精品成人在线播放| aaa国产一区| 自拍偷拍你懂的| 亚洲综合激情另类小说区| 久久久久久亚洲av无码专区| 欧美一区二区三区性视频| 五月婷婷丁香花| 精品国产欧美一区二区五十路| 黄色漫画在线免费看| 成人激情在线播放| 色爱综合av| 欧美性受黑人性爽| 久久精品国语| 日韩少妇一区二区| 亚洲欧洲www| 亚洲图片在线视频| 欧美mv和日韩mv的网站| chinese偷拍一区二区三区| 欧美激情高清视频| 成人豆花视频| 日本精品一区二区三区高清 久久| 欧美在线资源| 少妇网站在线观看| 久久久精品一品道一区| 激情五月婷婷小说| 欧美人xxxx| 极品美乳网红视频免费在线观看| 欧美激情在线观看视频| 青青草国产一区二区三区| 久久久久久亚洲精品不卡4k岛国 | 污视频软件在线观看| 久久午夜a级毛片| 国产精品久久乐| 欧美日韩精品久久| 亚洲青色在线| 国产精品91av| 亚洲人吸女人奶水| 在线观看免费高清视频| 亚洲石原莉奈一区二区在线观看| www欧美xxxx| 国产精品久久久久久久免费大片| 亚洲天堂免费| 在线免费黄色网| 国产精品视频在线看| 欧美一区二区三区久久久| 日韩av影视综合网| 国产在线观看www| 国产福利一区二区三区在线观看| 在线电影一区二区| 国内自拍第二页| 亚洲欧美自拍偷拍| 亚洲视频在线观看免费视频| 中文字幕亚洲图片| 日韩亚洲国产免费| 中文字幕中文字幕一区三区| 久久精品国产99久久6| 国产精品69久久久久孕妇欧美| 欧美综合在线视频| 亚洲免费视频一区二区三区| 国产精品自产拍在线观看| 日韩精品免费| 三级一区二区三区| 亚洲免费av在线| 亚洲第一免费视频| 国内精品免费午夜毛片| 噜噜噜狠狠夜夜躁精品仙踪林| 福利视频一二区| 久久综合中文字幕| 进去里视频在线观看| 最近中文字幕mv在线一区二区三区四区 | 亚洲国产日韩综合久久精品| 免费激情视频网站| 91国内产香蕉| 国产欧美日韩精品一区二区免费| 久久九九国产视频| 国产精品电影院| 精品人妻伦一二三区久久 | 亚洲看片网站| 国产一区二区免费视频| 免费网站看av| 日韩av网站电影| 97欧美成人| 蜜臀av.com| 99在线精品免费| 国产一级片免费视频| 久久久精品999| 都市激情亚洲欧美| www.日日操| 18成人在线视频| 凸凹人妻人人澡人人添| 国产精品劲爆视频| 欧美激情1区2区| 爱爱的免费视频| 欧美老肥妇做.爰bbww| 人人超在线公开视频| 欧洲在线视频一区| 国产精品资源网站| 成人精品免费在线观看| 色偷偷av亚洲男人的天堂| 国偷自产视频一区二区久| 欧美成人黄色网址| 亚洲国产视频一区二区| 国产视频网站在线| 成人永久免费| 日本aⅴ精品一区二区三区| 国模无码国产精品视频| 亚洲欧美制服综合另类| 一区二区中文字幕在线观看| caopor在线视频| 亚洲综合色自拍一区| 成人在线免费观看| 国产经典一区二区三区| 男人的天堂亚洲一区| 日韩高清精品免费观看| 日韩一二三在线视频播| 日韩电影不卡一区| 成人免费播放视频|