Я только начинаю использовать QueryDSL с Spring Data JPA. У меня есть класс, в котором я храню все свои предикаты, поэтому в своих методах службы я могу просто вызвать 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()
не работает, но есть ли способ сделать это, или я должен действовать по-другому?