Posted on 2009-07-16 17:46
月下孤城 閱讀(2271)
評(píng)論(0) 編輯 收藏 所屬分類:
hibernate
hibernate中對(duì)字段的延遲加載一般通過兩種方式處理:
1.hibernate3提供對(duì)實(shí)體對(duì)象字段延遲加載屬性(lazy=true/false)設(shè)置,并借助類增強(qiáng)器對(duì)二進(jìn)制Class文件進(jìn)行強(qiáng)化處理,然后就可以像使用set集合一樣使用字段的延遲加載。
詳細(xì)請(qǐng)參考:http://www.tkk7.com/wiflish/archive/2006/08/15/63692.html
2.通過實(shí)體對(duì)象的粒度細(xì)分來來實(shí)現(xiàn)。
詳細(xì)請(qǐng)參考:http://dingjun1.javaeye.com/blog/184082
但以上實(shí)現(xiàn)都很麻煩。對(duì)字段的延遲加載總覺得沒set結(jié)合的延遲來的簡(jiǎn)單。換個(gè)思考方式,在加載實(shí)體對(duì)象的時(shí)候如果只加載需要的字段屬性,不查詢延遲加載的字段,同樣達(dá)到提高效率的目的。只是這樣在返回的結(jié)果列表對(duì)象類型卻為Object數(shù)組,處理結(jié)果集時(shí)又和jdbc編程有點(diǎn)相似了,感覺有點(diǎn)怪怪的^_^(好像hibnernate對(duì)象映射優(yōu)勢(shì)沒顯示出來),仔細(xì)的查了下資料,其實(shí)hibernate select中支持new 關(guān)鍵詞查詢,在執(zhí)行查詢后她會(huì)把select的字段屬性值根據(jù)構(gòu)造器的反射原理自動(dòng)注入到new 的對(duì)象屬性中。
實(shí)例演示:
1.實(shí)體類:其中faqContent數(shù)據(jù)庫中類型varcher(8000).
public class Faqcontent implements

java.io.Serializable
{
private String faqcntId;

private Faqcatalog faqcatalog;//目錄id

private String faqcntTitle;//title

private String faqcntConent;//內(nèi)容字段,varchar(8000)字符

public Faqcontent()

{
}

/** *//**
* @param faqcntId
* @param faqcatalog
* @param faqcntTitle
*/
public Faqcontent(String faqcntId, Faqcatalog faqcatalog,
String faqcntTitle)

{
super();
this.faqcntId = faqcntId;
this.faqcatalog = faqcatalog;
this.faqcntTitle = faqcntTitle;
}


.set/get方法
}
2.Service中部分代碼:
1
public List<Faqcontent> getPageOfFaqcontentList(int pageSize,int recordPerPage,String condition,List paramValues)
{
2
2 StringBuilder hqlSb = new StringBuilder();
3
hqlSb.append(" select new Faqcontent(faqc.faqcntId,faqc.faqcatalog,faqc.faqcntTitle) from faqcontent faqc ");
4


.
5
3}
說明:在組織hql語句"select new Faqcontent(faqc.faqcntId,faqc.faqcatalog,faqc.faqcntTitle) from faqcontent faq "時(shí),對(duì)應(yīng)的實(shí)體對(duì)象Faqcontent一定要有相應(yīng)的構(gòu)造方法。
---------------------
月下孤城
mail:eagle_daiqiang@sina.com