<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

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产综合精品一区在线播放| 在线免费观看亚洲| 亚洲精品tv久久久久| 羞羞视频在线免费观看| 国产精品免费无遮挡无码永久视频| 四虎影院在线免费播放| 亚洲人成77777在线播放网站| 久久精品国产亚洲av麻豆图片| 一级毛片免费在线观看网站| 国产成人精品免费视频网页大全 | 免费精品一区二区三区第35| 四虎成人免费网址在线| 亚洲高清国产拍精品熟女| 久久精品毛片免费观看| 中文字幕精品亚洲无线码一区| 亚洲欧洲无卡二区视頻| 亚洲免费黄色网址| 亚洲国产成人资源在线软件| 日本视频免费高清一本18| 久久精品国产亚洲77777| 国产激情久久久久影院老熟女免费 | 亚洲av纯肉无码精品动漫| 在线日本高清免费不卡| 亚洲AV一二三区成人影片| 日韩中文无码有码免费视频| 久久精品国产亚洲AV蜜臀色欲 | 亚洲理论在线观看| 无码国产精品一区二区免费vr| 中文字幕亚洲不卡在线亚瑟| 男女超爽视频免费播放| 日韩精品免费电影| 黄 色一级 成 人网站免费| 亚洲成aⅴ人片久青草影院| 成人婷婷网色偷偷亚洲男人的天堂 | 午夜老司机免费视频| fc2免费人成在线视频| 亚洲黄色三级视频| 免费观看四虎精品国产永久| 色偷偷噜噜噜亚洲男人| 亚洲国产AV无码专区亚洲AV| 秋霞人成在线观看免费视频|