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

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 359730
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: www.免费在线观看| 免费在线观看一级毛片| 亚洲精品无码你懂的| 免费一看一级毛片全播放| 国产一级a毛一级a看免费视频| 亚洲色图在线播放| 免费看美女被靠到爽的视频| 一区二区三区免费视频观看| 噜噜噜亚洲色成人网站∨| 热99re久久免费视精品频软件 | 亚洲图片在线观看| 女性自慰aⅴ片高清免费| 中文字幕无码毛片免费看| 亚洲丝袜中文字幕| 亚洲国产午夜福利在线播放| 18以下岁毛片在免费播放| 青青免费在线视频| 亚洲毛片免费观看| 中文字幕亚洲专区| 成人性生交大片免费看无遮挡| 国产va免费观看| 在线观看亚洲AV每日更新无码| 亚洲综合精品香蕉久久网| 最近2019中文字幕免费看最新| 天黑黑影院在线观看视频高清免费| 自拍日韩亚洲一区在线| 亚洲精品无码永久在线观看你懂的| 最近中文字幕mv免费高清电影| 一区二区三区无码视频免费福利| 亚洲丶国产丶欧美一区二区三区| 亚洲第一精品福利| 亚洲精品国精品久久99热| 免费国产黄线在线观看 | 日本xxwwxxww在线视频免费| 嫩草影院在线播放www免费观看| 国产精品亚洲小说专区| 亚洲成人在线免费观看| 亚洲熟妇无码八AV在线播放| 国产免费午夜a无码v视频| 在线观看日本免费a∨视频| 免费人成在线观看网站|