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 <= 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>
分享到:
相关推荐
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
在数据库设计中,一对多关系意味着一个父表记录可以与多个子表记录相关联。例如,一个学生可以有多个课程,或者一个部门可以有多名员工。在Hibernate中,这种关系可以通过配置XML映射文件或使用注解来实现。 首先,...
例如,在学生(Student)和教师(Teacher)的多对多关系中,使用一个中间表(TeacherStudent)来存储关联。如果 Student 的 `inverse="true"`,那么添加一个新的 Student 时,Hibernate 不会在 TeacherStudent 表中...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
综上所述,Hibernate的一对多关联映射是实现Java对象与数据库表之间关系的关键特性。正确配置和使用它可以极大地简化开发工作,并提升应用程序的性能。通过深入理解这些概念,开发者能够更好地掌控Hibernate,从而在...
2. **联合主键关联** - 当两个表共享一个主键时,可以使用联合主键实现一对一关系。联合主键类需要实现`Serializable`接口,并重写`equals`和`hashCode`方法。 ```java @Entity @Table(name = "_husband") public ...
这包括一对一、一对多和多对多等多种类型,不同的关联关系会影响查询语句的编写和执行效率。 - **优化查询性能**:多表查询可能涉及大量数据的读取和处理,因此性能优化是不容忽视的一环。合理设计查询语句,避免...
3. **中间表的配置**:创建一个无意义的联合主键,通常由两个外键组成,分别对应两个参与关联的实体的主键。 4. **关联注解**:在两个实体类中,使用`@ManyToMany`注解来指定关联,同时通过`@JoinTable`注解来定义...
例如,在`s2sh_relation05_one2one_uni_fk_composite`的示例中,假设我们有一个`Student`实体和一个`Address`实体,它们之间存在一对一(One-to-One)的关系,并且`Address`使用联合主键。`Address`实体的主键可能...
本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...
在 Hibernate 中,组件之间的关联是实现对象模型与数据库表之间映射的关键部分,它包括了一对一、一对多、多对一、多对多等多种关联类型。本篇文章将深入探讨 Hibernate 组件之间的关联机制及其应用。 **一对一关联...
#### 三、自身一对多关系配置示例 自身一对多关系是指一个实体与自身形成的一对多关系,例如目录树结构。这里给出一个简单的配置示例: ```xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate ...
二、一对多(OneToMany)关联 一个实体可以与多个其他实体相关联,如用户和订单。配置时使用`@OneToMany`注解,可设置`mappedBy`、`fetch`(默认为EAGER,可改为LAZY实现懒加载)和`cascade`(级联操作)等属性。 ...
在一个实体中,如果一个实例可以对应多个其他实体的实例,这就是一对多关系。在Hibernate中,我们使用`@OneToMany`注解来表示。例如,一个部门可以有多个员工,Department类和Employee类可以通过`@OneToMany`进行...
"Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...
在ORM中,关联关系是数据库表之间的连接,如一对一、一对多、多对一和多对多关系。 1. **一对一关联(OneToOne)**:这种关系意味着一个实体仅与另一个实体的一个实例相关联。在Hibernate中,可以通过@OneToOne注解...
在描述中提到的“三表联合主键”,意味着可能涉及三个表的相互关联,每个表都有自己的主键,并且这些主键组合在一起形成了一个联合主键。这通常发生在复杂的关系型数据库设计中,例如在实现多对多关系或者需要更严格...
1. **联合主键**:当多对一关联的唯一性基于多个字段时,可以使用联合主键。 2. **二级缓存**:对于经常被查询的数据,可以开启二级缓存,进一步提升性能。 3. **避免N+1查询问题**:在批量操作或集合查询时,如果不...
- **一对多关联**:学生和分数表,课程和分数表之间是一对多关系,因为一个学生有多条分数记录,一门课程也有多个学生的分数。在Java类中,通过`@OneToMany`注解实现,`mappedBy`属性用于指定维护端,即谁负责更新...