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

java.io.Serializable
{
private String faqcntId;

private Faqcatalog faqcatalog;//目錄id

private String faqcntTitle;//title

private String faqcntConent;//內容字段,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 "時,對應的實體對象Faqcontent一定要有相應的構造方法。
---------------------
月下孤城
mail:eagle_daiqiang@sina.com