Запросите DSL с предикатом и получите соединение - PullRequest
0 голосов
/ 04 июня 2018

есть ли шанс получить объединенную сущность с использованием предиката?

    @Entity
public class Student {

    @Id
    private int id;

    private String hobby;

    private String favouriteColor;

    private String name;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    @JoinColumn(name = "CLASS_ID", referencedColumnName = "ID")
    private Classroom classroom;
}

@Entity
public class Classroom {

    @Id
    private int id;

    private String classRoom;

    private List<Student> students;

}

У меня есть некоторый предикат

public class StudentPredicate {

    private StudentPredicate() {}

    public static Predicate createPredicate(final Student filter) {
        QStudent student = QStudent.student;

        BooleanBuilder builder = new BooleanBuilder();

        if (isNotBlank(filter.getHobby())) {
            builder.and(student.hobby.eq(filter.getHobby());
        }
        if (isNotBlank(filter.getFavouriteColor())) {
            builder.and(student.favouriteColor.eq(filter.getFavouriteColor()));
        }


        return builder.getValue();
    }

}

и репозиторий

@Repository
public interface StudentRepository extends CrudRepository<Student, Integer>, QueryDslPredicateExecutor<Student> {

}

и сейчасКак я могу найти всех учеников с выбранными классами?

studentRepository.findAll(predicate)

Как сказать, чтобы запросить dsl, что эти findAll должны получить классную комнату?

1 Ответ

0 голосов
/ 04 июня 2018

Так как FetchType.LAZY для поля класса в классе Student, так что здесь, пока вы вызываете getClassRoom () фактически выберет связанный объект из db, или вы можете использовать FetchType.EAGER .

...