<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/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358616
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲阿v天堂在线2017免费| 999在线视频精品免费播放观看| 国产免费资源高清小视频在线观看 | 亚洲国产另类久久久精品 | 三级网站免费观看| 亚洲gv白嫩小受在线观看| 伊人免费在线观看| 亚洲AV日韩AV鸥美在线观看| 99久久国产免费中文无字幕| 亚洲精品免费在线| 中文字幕影片免费在线观看| 亚洲va久久久久| 日韩中文无码有码免费视频 | 国产免费无码AV片在线观看不卡| 亚洲熟妇中文字幕五十中出| 青青草原1769久久免费播放| 久久精品亚洲一区二区三区浴池 | 在线永久看片免费的视频| 亚洲www在线观看| 国产成人免费高清在线观看| 九九免费观看全部免费视频| 亚洲av最新在线网址| 国产精品1024永久免费视频| 亚洲AV成人无码久久WWW| 亚洲国产综合久久天堂| 免费视频一区二区| 亚洲日韩中文字幕天堂不卡| 国产精品免费_区二区三区观看| 人人爽人人爽人人片av免费 | 国产免费伦精品一区二区三区| 国产av天堂亚洲国产av天堂| 国产免费毛不卡片| 免费国产在线精品一区| 亚洲Aⅴ无码专区在线观看q| 成全高清视频免费观看| 亚欧洲精品在线视频免费观看| 久久精品国产亚洲AV香蕉| 黄网址在线永久免费观看 | 久久国产精品免费一区| 亚洲精品亚洲人成在线观看麻豆| 国产日产成人免费视频在线观看|