<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 閱讀(16683) 評論(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/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358627
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久章草在线精品视频免费观看| 亚洲美女免费视频| 亚洲国产美国国产综合一区二区| 亚洲欧洲免费视频| 亚洲国产精品无码中文lv| 国产成人精品日本亚洲专区61 | 亚洲一卡2卡3卡4卡国产网站| 在线jlzzjlzz免费播放| 国产精品1024在线永久免费| 亚洲国产高清美女在线观看| 免费播放特黄特色毛片| 久久不见久久见免费视频7| 久久人午夜亚洲精品无码区| 久久精品亚洲综合| 国产一区二区视频免费| 无码精品人妻一区二区三区免费看| 国产午夜亚洲精品国产| 亚洲高清专区日韩精品| 天天拍拍天天爽免费视频| 黄色免费在线网站| 羞羞视频免费观看| 亚洲图片校园春色| 亚洲深深色噜噜狠狠爱网站| 午夜寂寞在线一级观看免费| 久久aⅴ免费观看| 免费无码婬片aaa直播表情| 亚洲国产亚洲片在线观看播放| 不卡一卡二卡三亚洲| 一个人看www在线高清免费看| 国产精品偷伦视频免费观看了| 亚洲色精品VR一区区三区| 久久久综合亚洲色一区二区三区 | 亚洲另类自拍丝袜第1页| 亚洲色图综合在线| 日韩一级视频免费观看| 精品女同一区二区三区免费站| 三级网站免费观看| 一级一级一片免费高清| 久久亚洲欧美国产精品| 亚洲天堂2017无码中文| 亚洲精品午夜视频|