mysql QueryDsl在连接时获取所有记录,并且不考虑ON条件

1bqhqjot  于 2023-03-28  发布在  Mysql
关注(0)|答案(1)|浏览(94)

我试图获取记录的基础上加入,但它是获取匹配以及不匹配的实体。
数据库- 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条件。
请指教。

wgxvkvu9

wgxvkvu91#

Hibernate 5及更高版本不支持on子句,因此它不能工作。我们必须使用@Filter或@Where注解来实现这一点。

相关问题