我试图获取记录的基础上加入,但它是获取匹配以及不匹配的实体。
数据库- MySQL
数据模型-
查询-
ClassDetail classDetail = jpaQueryFactory
.selectFrom(CLASS_DETAIL).distinct()
.leftJoin(CLASS_DETAIL.students,STUDENT)
.on(CLASS_DETAIL.eq(CLASS_DETAIL))
.leftJoin(STUDENT.transactions,TRANSACTION)
.on(TRANSACTION.type.eq(PayTypeEnum.FEES.name()))
.where(CLASS_DETAIL.id.eq(classId))
.fetchOne();
ClassDetail与STUDENT具有多对多的双向关联,STUDENT与TRANSACTION具有一对多的双向关联。
我正在做懒惰加载,并使用hibernate 5.6.15 FINAL。
ClassDetail和预期的一样有STUDENT列表,但是当我遍历STUDENT,并执行getClassDetail()时,它给了我所有student所属的类,而没有考虑查询的ON
条件。与transaction相同,我只期望获取FEES
类型的transaction,但它也会获取列表中的所有其他类。
随附屏幕截图。
交易实体-
学生团体─
结果-
Lazy Load正在触发默认查询,并且不包括ON
条件。
请指教。
1条答案
按热度按时间wgxvkvu91#
Hibernate 5及更高版本不支持on子句,因此它不能工作。我们必须使用@Filter或@Where注解来实现这一点。