在querydsl中,调用
where(entity.id.eq(entity2.id))
和
where(entity.eq(entity2))
( entity, entity2
是不同的 QClass
示例)?
你更喜欢什么?
第一个版本是经常使用的,我在官方文件中至少可以看到第二个版本的一种用法:
.leftJoin(company).on(customer.company.eq(company))
(qdsl-4.4.0-连接)
在我的具体示例中,当我让记录器显示最终的sql时,两者都在id上进行比较。但在第二个版本中,id列正好位于“父表”上:
BCcgTeacherEOMetadata teacher = new BCcgTeacherEOMetadata("teacher2");
HibernateQuery<Object> uselessQuery = getQueryDslTemplate().createQueryFrom(courseStudent)
.join(courseStudent.course.teacher, teacher)
.where(courseStudent.course.teacher.eq(teacher));
System.out.println(uselessQuery.fetchFirst());
产量 ... where bcccoursee1_.TEACHER_ID=bccteacher2_.TEACHER_ID ...
而在ids上比较 ... where bccteacher2_.TEACHER_ID=bccteacher2_.TEACHER_ID ...
( *Metadata
基本上是一个 QClass
)
1条答案
按热度按时间jgovgodb1#
在第一种情况下,你可以指定你比较的内容。
其中(entity.id.eq(entity2.id))
第二种情况是比较两个对象的相等性。
根据官方文件中的等式:
其中(entity.eq(entity2)).leftjoin(company).on(customer.company.eq(company))
如果您想要一个精确的比较,在您确实想要显式比较的字段上,使用第一种情况。