JPQL Выберите родительскую сущность, в которой нет дочерней сущности, или Дочерняя сущность имеет свойство с определенным значением

#java #hibernate #jpa #spring-data-jpa #jpql

Вопрос:

У меня есть двунаправленные @OneToMany или родительско-дочерние отношения между двумя сущностями:

 @Entity
public class Test {
    @OneToMany(mappedBy = "test")
    private Set<Answer> answers = new HashSet<>();
}

@Entity
public class Answer {
    @ManyToOne
    @JoinColumn(name = "test_id")
    private Test test;

    @Column
    private Boolean isCorrect;  
}
 

Я хочу выбрать все Test s, у которых нет Answer или Test s с Answer isCorrect установленным свойством false .
Я использую Spring Boot .

Ответ №1:

Я предполагаю, что идентификатор теста имеет тип Integer:

 public interface TestRepository extends JpaRepository<Test, Integer> {

    @Query("select t from Test t join t.answers a where a is empty or a.isCorrect = true")
    List<Test> findTestsWithNoOrIncorrectAnswers();
}