超过一个"一对多"使用分离标准的关联(基于XML的休眠配置)

时间:2016-09-07 17:08:39

标签: java hibernate detachedcriteria hibernate-onetomany

我试图通过使用Hibernate的Detached Criteria Class来连接三个表。

我有三张桌子,分别是STUDENT,STUDENT_CORRESPOND,STUDENT_COURSES

表的主键是

**Table Names**            **Primary Keys**

STUDENT                     INQRY_ID

STUDENT_CORRESPOND          STUDENT_CRSP_ID

STUDENT_COURSES             COURSE_CD

选择*来自 db01.STUDENT INNER JOIN db01.STUDENT_CORRESPOND ON db01.STUDENT.INQRY_ID = db01.STUDENT_CORRESPOND.INQRY_ID INNER JOIN db01.STUDENT_COURSES ON db01.STUDENT_COURSES.COURSE_CD = db01.STUDENT.COURSE_CD

我的数据库中上述查询的实际DB结果为250。

我想通过使用分离标准来实现上述查询。

在StudentDO.hbm.xml中,我添加了以下代码,但是当我运行我的应用程序时,它没有显示任何结果.i.e

结果计数为零。

StudentDO.hbm.xml

<set name="StudentIds" lazy="true" inverse="true" cascade="none" sort="unsorted"
batch-size="10">
<key><column name="INQRY_ID" /></key>
<one-to-many class="com.test.StudentCorrespondenceDO"/>
</set>

<set name="coursecodes" lazy="true" inverse="true" cascade="none" sort="unsorted" batch-size="10">
<key><column name="COURSE_CD"/></key>
<one-to-many class="com.test.StudentCoursesDO"/>
</set>

我在StudentDO.Java文件中添加了受尊重的setter和getter方法。

我的应用程序主文件如下所示

DetachedCriteria detachedCriteria =DetachedCriteria.forClass(StudentDO.class);
detachedCriteria.createCriteria("StudentIds","stuids",Criteria.INNER_JOIN); 
detachedCriteria.createCriteria("coursecodes","coursecds",Criteria.INNER_JOIN);
List l = getHibernateTemplate().findByCriteria(detachedCriteria);
System.out.println(l.size());

结果为零。

But When I have coded like this (Only two tables joining ) 
----------------------------------------------------------------------

select *from 
db01.STUDENT 
INNER JOIN db01.STUDENT_CORRESPOND
ON db01.STUDENT.INQRY_ID =db01.STUDENT_CORRESPOND.INQRY_ID

实际数据库结果计数为10。

我想通过使用分离标准来实现上述查询。

StudentDO.hbm.xml

<set name="StudentIds" lazy="true" inverse="true" cascade="none"    sort="unsorted"
batch-size="10">
<key><column name="INQRY_ID" /></key>
<one-to-many class="com.test.StudentCorrespondenceDO"/>
</set>

我在StudentDO.Java文件中添加了受尊重的setter和getter方法。 当我运行我的应用程序时,它显示正确的结果。那是10

我的应用程序主文件对于两个表

看起来如下所示
DetachedCriteria detachedCriteria =DetachedCriteria.forClass(StudentDO.class);
detachedCriteria.createCriteria("StudentIds","stuids",Criteria.INNER_JOIN); 
List l = getHibernateTemplate().findByCriteria(detachedCriteria);
System.out.println(l.size());

因为,我提到两个表的连接工作正常。但是三个表连接不起作用。 请任何人都可以为我的问题提供解决方案。这将是你身边很有帮助的。

非常感谢。

0 个答案:

没有答案