<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 167,  comments - 30,  trackbacks - 0
    Hibernate不支持left join帶on的條件查詢。
    解決辦法:使用原生SQL或者使用HQL方式需要修改hbm文件(如果項目中大部分不適用級聯配置情況下)
    需求是查詢網絡信息,網絡信息中關聯了分區、網絡IP(1個網絡--N個網絡IP),網橋信息.
    HQL:
    public void queryVnets(Page page) {
            StringBuffer hql = new StringBuffer();
            hql.append("select new Map(vn.id as id, vn.vnName as vnName, b.name as vnType, ");
            hql.append("vn.vnIptype as vnIptype, vn.vnIp as vnIp,vn.vnNat as vnNat, vn.vnFlag as vnFlag, ");
            hql.append("vn.vnetFlag as vnetFlag, (case when sum(vmvn.state)='0' then 0 else 1 endas vnState, ");
            hql.append("vn.useType as useType, vn.createTime as createTime, ");
            hql .append("zone.oneName as oneName, zone.oneHypervisor as oneHypervisor, zone.oneSeq as oneSeq) ");
            hql.append("from VnetTable vn, ZoneTable zone, BridgeTable b ");
            hql.append("left join fetch vn.VnTables vmvn where zone.id = vn.zoneId and vn.vnType = b.id ");

            ... ...
            hql.append(" group by vn.id");
            if (vnState != null && !"".equals(vnState)) {
                if ("0".equals(vnState)) {
                    hql.append(" having sum(vmvn.state)=0");
                } else if ("1".equals(vnState)) {
                    hql.append(" having sum(vmvn.state)!=0");
                }
            }
        }

    hbm配置文件:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.base.mapping.VnetTable" table="vnet_table" >
            <id name="id" type="java.lang.String">
                <column name="ID" length="32" />
                <generator class="uuid.hex" />
            </id>
            <property name="vnId" type="java.lang.Long">
                <column name="VN_ID">
                    <comment>創建虛擬網絡時得到的ID</comment>
                </column>
            </property>
             ...
            <property name="zoneId" type="java.lang.String">
                <column name="ZONE_ID" length="32">
                    <comment>分區ID</comment>
                </column>
            </property>
            <property name="vlanId" type="java.lang.Integer">
                <column name="VLAN_ID">
                    <comment>VLAN_ID</comment>
                </column>
            </property>
            <set name="vnTables" lazy="false" order-by="id asc" inverse="false" fetch="join" cascade="all">
                <key column="VN_NID"/>
                <one-to-many class="com.base.mapping.VnTable"/>
            </set>
        </class>
    </hibernate-mapping>

    理解inverse和cascade,可以參考:http://blog.csdn.net/wkcgy/article/details/6271321
    總結: 
    <one-to-many>中,建議inverse=”true”,由“many”方來進行關聯關系的維護 
    <many-to-many>中,只設置其中一方inverse=”false”,或雙方都不設置 
    Cascade,通常情況下都不會使用。特別是刪除,一定要慎重。
    操作建議 
      一般對many-to-one和many-to-many不設置級聯,這要看業務邏輯的需要;對one-to-one和one-to-many設置級聯。
      many-to-many關聯關系中,一端設置inverse=”false”,另一端設置為inverse=”true”。在one-to-many關聯關系中,設置inverse=”true”,由多端來維護關系表










    posted on 2013-09-12 11:57 David1228 閱讀(16701) 評論(2)  編輯  收藏 所屬分類: Hibernate/ibatis

    FeedBack:
    # re: Hibernate的HQL多表聯合查詢使用left join方式
    2013-09-13 22:30 | gorshoes
    gooooood!!!  回復  更多評論
      
    # re: Hibernate的HQL多表聯合查詢使用left join方式
    2014-05-15 12:09 | rei
    有不修改配置文件的方法么  回復  更多評論
      

    <2013年9月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

    云計算/Linux/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 359723
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成年网在线观看免费观看网址 | 操美女视频免费网站| 亚洲国产精品成人精品无码区| 日日摸日日碰夜夜爽亚洲| 成年丰满熟妇午夜免费视频 | 亚洲精品成a人在线观看夫| 在线天堂免费观看.WWW| 亚洲一区二区三区高清视频| 69式互添免费视频| 亚洲中字慕日产2020| 日韩欧毛片免费视频| 亚洲熟女www一区二区三区| 性xxxx视频播放免费| 亚洲精品色播一区二区| 四只虎免费永久观看| 深夜免费在线视频| 亚洲一区爱区精品无码| 久久香蕉国产线看免费| 亚洲无限乱码一二三四区| 91嫩草国产在线观看免费| 亚洲精华国产精华精华液网站| 日本免费电影一区| 国产男女爽爽爽免费视频| 亚洲AV无码一区二区三区DV| 182tv免费观看在线视频| 激情综合亚洲色婷婷五月APP| 日本免费中文字幕在线看| 国产三级在线免费观看| 亚洲国产精品第一区二区| 好先生在线观看免费播放| 永久免费无码网站在线观看个| 亚洲精品蜜桃久久久久久| 13一14周岁毛片免费| 久久亚洲色WWW成人欧美| 亚洲熟妇无码乱子AV电影| 国产精品久久免费| 免费国产高清毛不卡片基地| 亚洲成人免费在线| 日韩免费观看一级毛片看看| a级毛片100部免费观看| 亚洲午夜精品一区二区麻豆|