JPQL ograniczenie danych w powiązaniu do kolumny z kolejnej tabeli.

0

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 ;)

1

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'.

Nie znam się ale nie możesz zrobić kolejnego dżointa z table3? Skoro jest ona powiązana z tabelą drugą, to wystarczy dżoint (lewy) i powinno być git, coś ala: LEFT JOINT table3 on t3.id = t2.t3_id AND t2.status = 'CLOSED'

1 użytkowników online, w tym zalogowanych: 0, gości: 1