Подобно предикату два root поля с критериалбилдером к двум дочерним полям - PullRequest
0 голосов
/ 17 апреля 2020

Существует таблица с двумя полями station_from и station_to, они связаны с таблицей станций. Я не могу понять, как вызвать предикатную функцию concat для заголовков, а затем вызвать аналогичную предикатную функцию. Пока я понимаю, как сделать поиск только по одному полю.

Сущность

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "station_from_id")
private StationEntity station_from;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "station_to_id")
private StationEntity station_to;

Спецификация

@Override
public Predicate toPredicate(Root<ConnectionEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
        List<Predicate> predicates = new ArrayList<>();
        if (filter != null) {
            String title = filter.getTitle();
            if (title != null) {
                Subquery<StationEntity> subQuery = criteriaQuery.subquery(StationEntity.class);
                Root subRoot = subQuery.from(StationEntity.class);
                subQuery.select(subRoot)
                        .where(criteriaBuilder.like(subRoot.get("title"), "%" + title + "%"));

                predicates.add(criteriaBuilder.in(root.get("station_from")).value(subQuery));
            }
...