亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Hibernate對(duì)自定義類型CompositeUserType的用法

系統(tǒng) 2211 0

使用CompositeUserType和使用UserType一樣,但CompositeUserType多了HQL的查詢支持,并相對(duì)比較復(fù)雜,一般使用UserType就足夠了

使用UserType參考 http://blog.csdn.net/daryl715/archive/2007/12/10/1927502.aspx ?

下面給出UserType不同的AddressType和測(cè)試代碼:

?


package ?Search.CompositeUserType;

import ?java.io.Serializable;
import ?java.sql.PreparedStatement;
import ?java.sql.ResultSet;
import ?java.sql.SQLException;
import ?java.sql.Types;

import ?org.apache.commons.lang.builder.EqualsBuilder;
import ?org.apache.commons.lang.builder.HashCodeBuilder;
import ?org.hibernate.Hibernate;
import ?org.hibernate.HibernateException;
import ?org.hibernate.engine.SessionImplementor;
import ?org.hibernate.type.Type;
import ?org.hibernate.usertype.CompositeUserType;
import ?org.hibernate.usertype.UserType;


public ? class ?AddressType? implements ?CompositeUserType,?Serializable? ... {

????
private ?String?homeAddr;
????
private ?String?workAddr;


?
????
/**/ /* 獲得屬性名數(shù)組,屬性名可用于進(jìn)行HQL查詢?? */
????
public ?String[]?getPropertyNames()? ... {
????????
return ? new ?String[]? ... {? " homeAddr " ,? " schoolAddr " ?} ;
????}


????
/**/ /* 獲得對(duì)應(yīng)的屬性類型,必須和屬性名數(shù)組元素的順序相對(duì)應(yīng)?? */
????
public ?Type[]?getPropertyTypes()? ... {
????????
return ? new ?Type[]? ... {?Hibernate.STRING,?Hibernate.STRING?} ;
????}


????
/**/ /* 通過index取得對(duì)象的屬性值,index從0開始,順序和配置文件中定義屬性的順序一致??? */
????
public ?Object?getPropertyValue(Object?component,? int ?property)
????????????
throws ?HibernateException? ... {
????????AddressType?address?
= ?(AddressType)?component;
????????
if ?(property? == ? 0 )
????????????
return ?address.getHomeAddr();
????????
else
????????????
return ?address.getWorkAddr();
????}


????
/**/ /* 根據(jù)index設(shè)置對(duì)象屬性?? */
????
public ? void ?setPropertyValue(Object?component,? int ?property,?Object?value)
????????????
throws ?HibernateException? ... {
????????AddressType?address?
= ?(AddressType)?component;
????????String?add_value?
= ?(String)value;
????????
if ?(property? == ? 0 )
????????????address.setHomeAddr(add_value);
????????
else
????????????address.setWorkAddr(add_value);
????????

????}


????
/**/ /* 返回對(duì)應(yīng)的映射類 */
????
public ?Class?returnedClass()? ... {
????????
return ?AddressType. class ;
????}


????
/**/ /* ?兩個(gè)對(duì)象是否相等,使用了apache的common工具包來進(jìn)行屬性比對(duì)? */
????
public ? boolean ?equals(Object?x,?Object?y)? throws ?HibernateException? ... {
????????
if ?(x? == ?y)
????????????
return ? true ;
????????
if ?(x? == ? null ? || ?y? == ? null )
????????????
return ? false ;
????????AddressType?add1?
= ?(AddressType)?x;
????????AddressType?add2?
= ?(AddressType)?y;
????????
return ? new ?EqualsBuilder()? // 使用EqualsBuilder類來方便地進(jìn)行比對(duì)
????????????????.append(add1.getHomeAddr(),?add2.getHomeAddr())
????????????????.append(add2.getWorkAddr(),?add2.getWorkAddr())
????????????????.isEquals();

????}


????
/**/ /* ?得到hash碼? */
????
public ? int ?hashCode(Object?x)? throws ?HibernateException? ... {
????????AddressType?address?
= ?(AddressType)?x;
????????
return ? new ?HashCodeBuilder() // 使用HashCodeBuilder類來方便地進(jìn)行比對(duì)
????????????????????.append(address.getHomeAddr()).append(address.getWorkAddr())
????????????????????.toHashCode();

????}


????
/**/ /* ?讀取數(shù)據(jù)并組裝成一個(gè)AddressType對(duì)象。names[]中的參數(shù)順序依照映射文件中定義的順序? */
????
public ?Object?nullSafeGet(ResultSet?rs,?String[]?names,
????????????SessionImplementor?session,?Object?owner)
????????????
throws ?HibernateException,?SQLException? ... {
????????
if ?(rs.wasNull())
????????????
return ? null ;
????????String?homeAddr?
= ?rs.getString(names[ 0 ]);
????????String?schoolAddr?
= ?rs.getString(names[ 1 ]);
????????AddressType?address?
= ? new ?AddressType(homeAddr,?schoolAddr);
????????
return ?address;
????}


????
/**/ /* ?保存數(shù)據(jù),index的順序按照映射文件定義的順序,從0開始。? */ ?
????
public ? void ?nullSafeSet(PreparedStatement?st,?Object?value,? int ?index,
????????????SessionImplementor?session)?
throws ?HibernateException,?SQLException? ... {
????????AddressType?address?
= ?(AddressType)?value;
????????
if ?(value? == ? null )? ... {
??????????????st.setNull(index,?Types.VARCHAR);
??????????????st.setNull(index
+ 1 ,?Types.VARCHAR);
????????}
? else ? ... {
????????????st.setString(index,?address.getHomeAddr());
????????????st.setString(index?
+ ? 1 ,?address.getWorkAddr());
????????}

?????????System.out.println(
" Data?has?been?saved!? " );

????}


????
/**/ /* 完整拷貝一個(gè)對(duì)象,而不是直接返回它的引用????? */
????
public ?Object?deepCopy(Object?value)? throws ?HibernateException? ... {
????????
if ?(value? == ? null )
????????????
return ? null ;
????????AddressType?address?
= ?(AddressType)?value;
????????
return ? new ?AddressType(address.getHomeAddr(),?address.getWorkAddr());
????}


????
/**/ /* 設(shè)置類可變,可以通過屬性的set方法改變屬性值 */
????
public ? boolean ?isMutable()? ... {
?????????
return ? true ;
????}

????
/**/ /* ?當(dāng)把AddressType類型數(shù)據(jù)寫入二級(jí)緩存時(shí),此方法被調(diào)用? */
????
public ?Serializable?disassemble(Object?value,?SessionImplementor?session)
????????????
throws ?HibernateException? ... {
????????
return ?(Serializable)?deepCopy(value);
????}


Hibernate對(duì)自定義類型CompositeUserType的用法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 不卡网站 | 奇米狠狠操 | 午夜窝窝 | 奇米色偷偷 | 国产精品成人观看视频免费 | 在线久久 | 成年女人黄小视频 | 亚洲免费一区二区 | 国产人成激情视频在线观看 | 久久www免费人成_看片美女图 | 亚洲伦理一二三四 | 国产精品自拍一区 | 久热中文字幕在线精品首页 | 国内主播大秀福利视频在线看 | 亚洲精品国产福利在线观看 | 亚洲国产精品自产在线播放 | 免费高清毛片 | 91国内视频 | 欧美成人精品第一区二区三区 | 黄色毛片小视频 | 四虎影视国产在线观看精品 | 国产香蕉网| 人人澡 人人澡 人人看欧美 | 91精品自在拍精选久久 | 久久机热re这里只有精品15 | 色综合综合 | 亚洲精品久久久久综合中文字幕 | 99精品国产三级在线观看 | 自拍亚洲国产 | 99尹人香蕉国产免费天天在线 | 国产小视频在线观看www | 国产美女一级视频 | 亚洲在线国产 | 日本久久精品免视看国产成人 | 亚洲欧美日韩高清一区二区三区 | 天天操夜夜夜 | 久草中文视频 | 永久黄网站色视频免费观看99 | 国产精品400部自产在线观看 | 久热免费视频 | 91精品国产91久久久久久麻豆 |