Вот моя модель:
Сущности:
public class AdmisHistory {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "admisHistory", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Admis> admis = new ArrayList<>();
public class Admis {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = ADMIS_HISTORY_ID)
private AdmisHistory admisHistory;
@OneToOne(mappedBy = "admis", cascade = CascadeType.ALL)
private AdmisRejet admisRejet;
public class AdmisRejet {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = ADMIS_ID)
private Admis admis;
Учитывая AdmisHistory, я хочу получить список AdmisRejet.
Мне удается сделатьэто так:
public interface AdmisRepository extends CrudRepository<Admis, Long> {
List<Admis> findAllAdmisByAdmisHistory(AdmisHistory admisHistory);
...
// It work llike this:
admisRepository.findAllAdmisByAdmisHistory(admisHistory)
.stream()
.filter(adm -> adm.getAdmisRejet() != null)
Теперь я хотел бы сделать это простым вызовом в хранилище.Это было бы намного эффективнее и читабельнее.
Примерно так:
public interface AdmisRejetRepository extends CrudRepository<AdmisRejet, Long> {
List< AdmisRejet> findAllAdmisRejetByAdmisHistory(AdmisHistory admisHistory);
}
Но я получаю эту ошибку:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property history found for type Admis! Traversed path: AdmisRejet.admis.'
Я пытаюсь с @Query, носинтаксис не очень хорош:
public interface AdmisRejetRepository extends CrudRepository<AdmisRejet, Long> {
@Query("SELECT a " +
"FROM AdmisRejet ar " +
"LEFT JOIN ar.admis a, " +
"LEFT JOIN a.admisHistory ah " +
"WHERE ah = :admisHistory")
List< AdmisRejet> findAllByHistory(AdmisHistory admisHistory);
}
Как я могу это сделать?