Cześć,
Mam mniej więcej, w uproszczeniu takie zapytanie w JPQL :
@Query("SELECT new com.nerkowiec.TableOneTableTwoDto(t1, t2) "
+ "FROM TableOne t1 "
+ "LEFT JOIN Table2 t2 ON t2.someColumn = t1.matchedColumn AND t2.something > 10"
+ "WHERE t1.id IN :table1Ids ")
Set<TableOneTableTwoDto> findSomething(@Param("table1Id") List<Long> table1Ids);
Czyli generalnie zrzucam sobie do dto rekord z Table1 i powiązany do niego rekord z Table2, który spełnia tam jakieś warunki, jeśli nie ma pasującego rekordu Table2 to po prostu jest tam null.
To co potrzebuję teraz zrobić, to ograniczyć jeszcze te pasujące rekordy z Table2, ale na podstawie kolumny z trzeciej tabeli powiązanej do Table2, więc potrzebuję dodać coś w stylu Table2.table3.status != 'CLOSED'.
I teraz nie mam pomysłu jak to w SQL obrobić - to ograniczenie ma dotyczyć tylko tych Table2, czyli jeśli rekord z table2, posiada powiązany rekord do Table3, który ma w kolumne status 'CLOSED' to w moim dto TableOneTableTwoDto to t2 ma być null.
Mogę to obrobić w javie, czyli zrobić coś takiego:
findSomething(t2Ids).forEach(tableOneTableTwo -> {
if (tableOneTableTwo.getTable2() != null && tableOneTableTwo.getTable2().getTable3().getStatus() != 'CLOSED') {
// do something
} else {
// do something else
}
});
No, ale wolałbym w samym zapytaniu to uwzględnić, tylko coś mi nie wychodzi, prosiłbym o porady ;)