我刚刚开始使用带有 Spring Data JPA 的 QueryDSL。我有一个存储所有谓词的类,因此在我的服务方法中,我可以通过传入布尔表达式在我的存储库上调用 findAll() 或 findOne()。这是一个例子:
谓词类方法:
public static BooleanExpression byCode(String code) {
return QHeading.heading.code.eq(code);
}
服务类方法:
public Iterable<Heading> getByCode(final String code) {
return headingRepository.findAll(byCode(code));
}
这很好用,但是在一个标题是另一个标题的子标题的情况下,我想重用我的谓词类中的相同方法,只需将其包装在另一个返回父标题的方法中,而不是匹配的子标题布尔表达式。但是,我很难找出正确的方法来做到这一点。
所以,它会是这样的:
谓词方法:
public static BooleanExpression byCode(String code) {
return QHeading.heading.code.eq(code);
}
public static BooleanExpression byChildCode(String code) {
QHeading.heading.childHeadings.eq(byCode(code));
}
服务方式:
public Iterable<Heading> getByChildCode(final String code) {
return headingRepository.findAll(byChildCode(code));
}
显然,该eq()
方法不起作用,但是有没有办法做到这一点,或者我应该完全以不同的方式来解决这个问题?