七郎's JavaBlog

          草木竹石皆可為劒。至人之用人若鏡,不將不迎,應而不藏,故能勝物而不傷。
          posts - 60, comments - 14, trackbacks - 0, articles - 0

          Hibernate提供了HQL,方便查詢的編寫。但是在某些情況下,我更喜歡用Criteria,因為它的語義非常明確。

          在處理對象關聯(lián)的時候,經(jīng)常要對對象下的某個集合字段進行條件限制。比如下面的類:

          public class MainClass{  protected long id;  protected int type;  protected Set<SubClass> subs= new HashSet<SubClass>();  ......  getter/setter}  public class SubClass{  protected long id;  protected int value;  protected Set<MainClass> ms = new HashSet<MainClass>();  ...... getter/setter} 

          在初始化數(shù)據(jù)中,假設MainClass的實例m1含有SubClass的實例s1,s2,s3;MainClass的實例m2含有SubClass的實例s2,s3,s4。

          而其中s1,s2,s3,s4的value分別是1,2,3,4 

          現(xiàn)在要查詢出 MainClass中SubClass集合含有SubClass實例value為2的的MainClass實例并且type為1,可以使用下面的查詢方法:

            DetachedCriteria criteria = DetachedCriteria        .forClass(MainClass.class);  criteria.add(        Restrictions.eq("type", new Integer(1)))        .createAlias("subs", "s").add(             Restrictions.eq("s.value", new Integer(2)));

          執(zhí)行此查詢對象后會得到符合條件的MainClass實例。

          需要注意的是在獲取的MainClass實例中,subs是完全的記錄集,而不是經(jīng)過過濾的記錄集,也就是相當于根據(jù)MainClass的ID獲取的完整實例一樣。

          ps: 

            如果需要過濾subs的記錄集,需要使用額外的過濾方法,請參考Hibernate的具體實現(xiàn)。

            使用HQL也可以很方便地實現(xiàn),但是需要給出完整的join標記,不如createAlias來得方面和直觀。 


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 成武县| 三明市| 施甸县| 双鸭山市| 襄城县| 盐城市| 德庆县| 安国市| 永定县| 镇康县| 霍林郭勒市| 彭泽县| 翁源县| 高安市| 马鞍山市| 锡林郭勒盟| 安化县| 奉新县| 霍州市| 夹江县| 江西省| 嘉黎县| 苍山县| 平乡县| 志丹县| 嘉善县| 霸州市| 电白县| 通渭县| 思茅市| 太仆寺旗| 扶绥县| 怀仁县| 天台县| 南丰县| 甘孜县| 屯昌县| 从化市| 正阳县| 莱州市| 抚松县|