HQL zapytanie - in 2 kolumny

HQL zapytanie - in 2 kolumny
hcubyc
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 3 lata
0

Chcę napisać zapytanie HQL, którego fragment zawiera
and x.id in (select y.id from Table y)
lecz chciałbym, żeby sprawdzało czy x.id jest w dwóch kolumnach tabeli Table, przykładowo:
and x.id in (select y.id, y.id2 from Table y)
ale wtedy dostaję:

Kopiuj
SEVERE: ERROR: subquery has too many columns 
org.hibernate.exception.SQLGrammarException: could not execute query
Caused by: org.postgresql.util.PSQLException: ERROR: subquery has too many columns

na stackoverflow widziałem możliwą odpowiedź, by zrobić coś w stylu:
and (x.id, x.id) in (...)
lecz nie wydaje mi się, żeby to działało tak jak chcę dla dwóch tych samych wartości (x.id).
Cel jest taki, żeby sprawdzić czy x.id znajduje się w kolumnie y.id lub y.id2


Limitations are limitless > ##### Ola Nordmann napisał(a)
> Moim językiem ojczystym jest C++ i proszę uszanować to, że piszę po polsku.
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:13 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
1

Klauzula in pozwala na porównanie ze zbiorem obiektów o takiej samej ilości kolumn.

Prawidłowym rozwiązaniem będzie Unia dwóch podzapytań tak by otrzymać jedną kolumnę. W SQLu:

Kopiuj
and x in (select id from y union select id2 from y)

Niestety hql nie wspiera unii > https://hibernate.atlassian.net/browse/HHH-1050 (bug z 2005 roku!). Zatem trzeba zrobić to przez warunek OR:
and (x.id in (select y.id from Table y) or x.id in (select y.id2 from Table y))


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
hcubyc
Dzięki, dokładnie o to mi chodziło ; )

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.