qdsl在实体vs id上调用.eq()

7nbnzgx9  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(367)

在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 )

jgovgodb

jgovgodb1#

在第一种情况下,你可以指定你比较的内容。
其中(entity.id.eq(entity2.id))
第二种情况是比较两个对象的相等性。
根据官方文件中的等式:

eq

public BooleanExpression eq(T constant)

Description copied from interface: ExtendedSubQuery
Create a this == right expression

Specified by:
    eq in interface ExtendedSubQuery<T>
Parameters:
    constant - rhs of the comparison
Returns:
    this == right

其中(entity.eq(entity2)).leftjoin(company).on(customer.company.eq(company))
如果您想要一个精确的比较,在您确实想要显式比较的字段上,使用第一种情况。

相关问题