Huion
          事業(yè)向左...愛(ài)情向右...失去的...我會(huì)在未來(lái)期待...
          posts - 1,comments - 3,trackbacks - 0
          問(wèn)題提出:最近項(xiàng)目出現(xiàn)一個(gè)Article持久類(lèi),該持久類(lèi)擁有一個(gè)Clob屬性用于記錄文章的內(nèi)容!示例如下:

          public class Article implements Serializable{
              
          public Long articleId;
              
          public String author;
              
          public String title;
              
          public Date created;
              
          public Clob content;

          //getter
          //setter
          }


          后來(lái)發(fā)現(xiàn),在查找文章列表的時(shí)候,每個(gè)Article都要從數(shù)據(jù)庫(kù)中加載出content!嚴(yán)重影響效率!

          解決方案1:

          在網(wǎng)上找相關(guān)的資料,利用hql可以解決問(wèn)題:

          select new Article(a.articleId,a.author,a.title,a.created) from Article as a where

          記得要為 Article 添加構(gòu)造函數(shù),像上面的hql需要構(gòu)造函數(shù)如:

          public Article(Long articleId,String author,String title,Date create){
          this.articleId = articleId;
          this.author = author;
          this.title =  title;
          this.create = create;
          }

          解決方案2:

          然而這樣子做,列表里面的Article還不夠輕量,于是突然有天在Hibernate官方網(wǎng)站找出更好的解決方法!那就是所謂的Light Weight模式,示例代碼如下:

          public class ArticleInfo implements Serializable{
              
          public Long articleId;
              
          public String author;
              
          public String title;
              
          public Date created;

          //getter
          //setter
          }


          public class Article extends ArticleInfo{
              
          public Clob content;

          //getter
          //setter
          }


          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
          <hibernate-mapping>
          <class name="test.ArticleInfo" table="test_article" polymorphism="explicit" >
          <id name="articleId" column="article_id" type="java.lang.Long" length="30">
          <generator class="sequence">
          <param name="sequence">article_seq</param>
          </generator>
          </id>
          <property name="authorId" column="author_id" type="java.lang.String" length="10" not-null="true"/>

          <property name="title" column="title" type="java.lang.String" length="10" not-null="true"/>

          <property name="created" column="created" type="java.util.Date" not-null="true"/>
          </class>
          </hibernate-mapping>


          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
          <hibernate-mapping>
          <class name="test.Article" table="test_article" polymorphism="explicit" >
          <id name="articleId" column="article_id" type="java.lang.Long" length="30">
          <generator class="sequence">
          <param name="sequence">article_seq</param>
          </generator>
          </id>
          <property name="authorId" column="author_id" type="java.lang.String" length="10" not-null="true"/>

          <property name="title" column="title" type="java.lang.String" length="10" not-null="true"/>

          <property name="created" column="created" type="java.util.Date" not-null="true"/>

          <property name="content" column="content" type="java.sql.Clob" not-null="true"/>
          </class>
          </hibernate-mapping>


          記得要加上 polymorphism="explicit" 表示為多態(tài)!

          這樣子,當(dāng)我們需要加載大對(duì)象content的時(shí)候可以

          session.load(Article.class,articleId);
          OR
          String hql="select a from Article as a where...";

          如果,不需要用到大對(duì)象,則可以

          session.load(ArticleInfo.class,articleId);
          OR
          String hql="select a from ArticleInfo as a where ...";
          posted on 2005-06-12 22:44 一輝 閱讀(163) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Hibernate

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 桑日县| 梁平县| 涿鹿县| 江永县| 保亭| 大兴区| 新蔡县| 陈巴尔虎旗| 鄂州市| 平湖市| 河源市| 扎赉特旗| 兴义市| 黔东| 固安县| 曲沃县| 德钦县| 定日县| 绥江县| 沐川县| 康定县| 大悟县| 海伦市| 扬中市| 巴彦淖尔市| 偏关县| 建水县| 龙游县| 伊春市| 正定县| 五家渠市| 丹棱县| 永清县| 渑池县| 体育| 延吉市| 攀枝花市| 屯昌县| 安康市| 阿鲁科尔沁旗| 黄平县|