`
tolys
  • 浏览: 112436 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

hibernate 多表(三表)一对多(联合主键)关联查询

阅读更多
TblEnter  (1..N) TblEva  (1..N) TblEvaMember
  A                 B                C
三表中各有搜索条件 TBL_A.XXX.. TBL_B.XXX.. TBL_C.XXX.. (A和B通过一个主键关联 ,B和C通过两个联合主键关联)

要求页面显示 :

TBL_A.id 1
    TBL_B.id1  TBL_B.XXX
    TBL_B.id2  TBL_B.XXX
    TBL_B.id3  TBL_B.XXX
TBL_A.id 2
    TBL_B.id1  TBL_B.XXX
    TBL_B.id2  TBL_B.XXX 
TBL_A.id 3
    TBL_B.id1  TBL_B.XXX
    TBL_B.id2  TBL_B.XXX
    ...

求HQL 或者 SQL实现!
有空的加我MSN:hundsunlin@hotmail.com

映射关系如下:实体Bean略 用Set表示一对多

<hibernate-mapping>
	<class name="jp.go.mlit.eva.domain.TblEnter" table="TBL_ENTER"
		schema="dbo" catalog="evadb">
		<id name="enterId" type="java.lang.String">
			<column name="ENTER_ID" length="5" />
			<generator class="assigned" />
		</id>
		<many-to-one name="mstOrgByEvaOrg"
			class="jp.go.mlit.eva.domain.MstOrg" fetch="select">
			<column name="EVA_ORG" length="2" not-null="true" />
		</many-to-one>
		<many-to-one name="mstPref"
			class="jp.go.mlit.eva.domain.MstPref" fetch="select">
			<column name="PREFECTURE" length="2" not-null="true" />
		</many-to-one>
		<many-to-one name="mstMode"
			class="jp.go.mlit.eva.domain.MstMode" fetch="select">
			<column name="MODE" length="2" not-null="true" />
		</many-to-one>
		<many-to-one name="mstOrgByJuris"
			class="jp.go.mlit.eva.domain.MstOrg" fetch="select">
			<column name="JURIS" length="2" not-null="true" />
		</many-to-one>
		<property name="enterName" type="java.lang.String">
			<column name="ENTER_NAME" length="200" not-null="true" />
		</property>
		<property name="lastName" type="java.lang.String">
			<column name="LAST_NAME" length="20" />
		</property>
		<property name="firstName" type="java.lang.String">
			<column name="FIRST_NAME" length="20" />
		</property>
		<property name="address" type="java.lang.String">
			<column name="ADDRESS" length="400" />
		</property>
		<property name="url" type="java.lang.String">
			<column name="URL" length="100" />
		</property>
		<property name="deleteFlg" type="java.lang.String">
			<column name="DELETE_FLG" length="1" not-null="true" />
		</property>
		<property name="updatetime" type="java.util.Date">
			<column name="UPDATETIME" length="23" />
		</property>
		<set name="tblEvas" inverse="true">
			<key>
				<column name="ENTER_ID" length="5" not-null="true" />
			</key>
			<one-to-many class="jp.go.mlit.eva.domain.TblEva" />
			<filter name="filterEvas"
				condition="ENTER_ID=:tblEnterId and EVA_ID= :tblEvaId" />
		</set>

		<property name="countEvaInfo"
			formula="(SELECT COUNT(*) FROM TBL_EVA AS t   WHERE  
        	         t.ENTER_ID = ENTER_ID
        	  AND t.DELETE_FLG = 0    
        	  AND t.EVA_DATE &lt;= Getdate()
        	  AND t.EVA_RPT IS NOT NULL  	      	 
        	  )">
		</property>

	</class>

	<filter-def name="filterEvas">
		<filter-param name="tblEnterId" type="java.lang.String" />
		<filter-param name="tblEvaId" type="java.lang.String" />
	</filter-def>

</hibernate-mapping>



<hibernate-mapping>
	<class name="jp.go.mlit.eva.domain.TblEva" table="TBL_EVA"
		schema="dbo" catalog="evadb">
		<composite-id name="id"
			class="jp.go.mlit.eva.domain.TblEvaId">
			<key-many-to-one name="tblEnter"
				class="jp.go.mlit.eva.domain.TblEnter">
				<column name="ENTER_ID" length="5" />
			</key-many-to-one>
			<key-property name="evaId" type="java.lang.String">
				<column name="EVA_ID" length="3" />
			</key-property>
		</composite-id>
		<many-to-one name="mstOrgByEvaOrg"
			class="jp.go.mlit.eva.domain.MstOrg" fetch="select">
			<column name="EVA_ORG" length="2" />
		</many-to-one>
		<many-to-one name="mstPref"
			class="jp.go.mlit.eva.domain.MstPref" fetch="select">
			<column name="PREFECTURE" length="2" />
		</many-to-one>
		<many-to-one name="mstMode"
			class="jp.go.mlit.eva.domain.MstMode" fetch="select">
			<column name="MODE" length="2" />
		</many-to-one>
		<many-to-one name="mstOrgByJuris"
			class="jp.go.mlit.eva.domain.MstOrg" fetch="select">
			<column name="JURIS" length="2" />
		</many-to-one>
		<property name="enterName" type="java.lang.String">
			<column name="ENTER_NAME" length="200" not-null="true" />
		</property>
		<property name="lastName" type="java.lang.String">
			<column name="LAST_NAME" length="20" />
		</property>
		<property name="firstName" type="java.lang.String">
			<column name="FIRST_NAME" length="20" />
		</property>
		<property name="address" type="java.lang.String">
			<column name="ADDRESS" length="400" />
		</property>
		<property name="url" type="java.lang.String">
			<column name="URL" length="100" />
		</property>
		<property name="evaDateDiv" type="java.lang.String">
			<column name="EVA_DATE_DIV" length="1" />
		</property>
		<property name="evaDate" type="java.lang.String">
			<column name="EVA_DATE" length="23" />
		</property>
		<property name="evaRpt"
			type="org.springframework.orm.hibernate3.support.BlobByteArrayType">
			<column name="EVA_RPT" length="1073741823" />
		</property>
		<property name="evaRptUpdater" type="java.lang.String">
			<column name="EVA_RPT_UPDATER" length="92" />
		</property>
		<property name="evaRptUpdatetime" type="java.util.Date">
			<column name="EVA_RPT_UPDATETIME" length="23" />
		</property>
		<property name="deleteFlg" type="java.lang.String">
			<column name="DELETE_FLG" length="1" not-null="true" />
		</property>
		<property name="updatetime" type="java.util.Date">
			<column name="UPDATETIME" length="23" />
		</property>
		<set name="tblEvaMembers" inverse="true">
			<key>
				<column name="ENTER_ID" length="5" not-null="true" />
				<column name="EVA_ID" length="3" not-null="true" />
			</key>
			<one-to-many class="jp.go.mlit.eva.domain.TblEvaMember" />
			<filter name="filterMembers"
				condition="EVA_MEMBER_ID=:memberId" />
		</set>
		<set name="tblEvaInfos" inverse="true">
			<key>
				<column name="ENTER_ID" length="5" not-null="true" />
				<column name="EVA_ID" length="3" not-null="true" />
			</key>
			<one-to-many class="jp.go.mlit.eva.domain.TblEvaInfo" />
		</set>

        <property name="countEvaRelateFile" 
        	 formula = "(
        	   SELECT COUNT(ei.ENTER_ID) 
				  FROM TBL_EVA_INFO ei
			     WHERE ei.DIVISION = 01
			         AND ei.ENTER_ID = ENTER_ID
			         AND ei.EVA_ID = EVA_ID
  		           )">
		</property>
		<property name="countEvaResultFile"
			formula="(
        	   SELECT 
        	   CASE WHEN EVA_RPT IS NOT NULL 
        	   THEN COUNT(ei.ENTER_ID)+1
        	   ELSE COUNT(ei.ENTER_ID)
        	   END
				  FROM TBL_EVA_INFO ei
			    WHERE ei.DIVISION = 02
			        AND ei.ENTER_ID = ENTER_ID
			        AND ei.EVA_ID = EVA_ID
  		           )">
		</property>
	</class>

	<filter-def name="filterMembers">
		<filter-param name="memberId" type="java.lang.String" />
	</filter-def>
</hibernate-mapping>


<hibernate-mapping>
    <class name="jp.go.mlit.eva.domain.TblEvaMember" table="TBL_EVA_MEMBER">
        <composite-id name="id" class="jp.go.mlit.eva.domain.TblEvaMemberId">
            <key-many-to-one name="tblEva" class="jp.go.mlit.eva.domain.TblEva">
                <column name="ENTER_ID" length="5" />
                <column name="EVA_ID" length="3" />
            </key-many-to-one>
            <key-many-to-one name="tblUser" class="jp.go.mlit.eva.domain.TblUser">
                <column name="EVA_MEMBER_ID" />
            </key-many-to-one>
        </composite-id>
        <property name="dspBelong" type="java.lang.String">
            <column name="DSP_BELONG" length="50" not-null="true" />
        </property>
        <property name="dspAuthority" type="java.lang.String">
            <column name="DSP_AUTHORITY" length="10" not-null="true" />
        </property>
        <property name="dspMode" type="java.lang.String">
            <column name="DSP_MODE" length="12" />
        </property>
        <property name="dspUserLastname" type="java.lang.String">
            <column name="DSP_USER_LASTNAME" length="20" not-null="true" />
        </property>
        <property name="dspUserFirstname" type="java.lang.String">
            <column name="DSP_USER_FIRSTNAME" length="20" not-null="true" />
        </property>
        <property name="leaderFlg" type="java.lang.String">
            <column name="LEADER_FLG" length="1" not-null="true" />
        </property>
        <property name="updatetime" type="java.util.Date">
            <column name="UPDATETIME" length="23" />
        </property>
    </class>
</hibernate-mapping>


分享到:
评论
4 楼 yangtao309 2008-11-05  
这是hibernate 几啊? 多长时间没搞hibernate了...
3 楼 流浪者A 2008-11-05  
给个简单说明就差不多了·
2 楼 zhongxy0000 2008-10-31  
好复杂。。。
1 楼 tolys 2008-03-06  
自己顶 一下!

相关推荐

    Hibernate 系列教程 单向一对多

    Hibernate 系列教程 单向一对多

    Hibernate关联关系配置

    Hibernate关联关系配置,一对一,一对多,多对多,联合主键等的配置

    hibernate学习笔记

    hibernate一对多双向自连接关联映射 15 hibernate多对多关联映射(单向User----&gt;Role) 19 hibernate多对多关联映射(双向User&lt;----&gt;Role) 20 Hibernate的继承关系 21 每棵继承树映射成一张表(hibernate_extends_1) 22 ...

    Hibernate学习笔记_songjignhao_1

    一对多双向关联关系、一对多双向自身关联关系、一对一关联关系(主键关联、外键关联)、一对多与一对一结合、多对多关联关系、Map、Set、List与Bag映射关系、查询排序(内存排序和数据库排序)、联合主键的映射规则、...

    Hibernate注释大全收藏

    这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....

    Hibernate 中文 html 帮助文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联,...

    hibernate 体系结构与配置 参考文档(html)

    一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联,涉及...

    最全Hibernate 参考文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 三重关联...

    Hibernate教程

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    Hibernate实战(第2版 中文高清版)

     7.2.1 一对多关联   7.2.2 多对多关联   7.2.3 把列添加到联结表   7.2.4 映射map   7.3 多态关联   7.3.1 多态的多对一关联   7.3.2 多态集合   7.3.3 对联合的多态关联   7.3.4 每个具体类一张...

    Hibernate注解

    * @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载 * 方法一 使用这种配置,在为“一端”添加“多...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

    Hibernate3的帮助文档

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    Hibernate中文API大全

    组件的属性可以是任意一种Hibernate类型(包括集合, 多对多关联, 以及其它组件等等)。嵌套组件不应该被当作一种特殊的应用(Nested components should not be considered an exotic usage)。 Hibernate倾向于支持...

    hibernate3.04中文文档.chm

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    hibernate 框架详解

    一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    Hibernate3+中文参考文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 三重关联...

    Hibernate参考文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联,...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

Global site tag (gtag.js) - Google Analytics