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

[color=red]映射关系如下:[/color]实体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 <= 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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值