2011-01-25 13 views
35

trzeba połączyć 2 tabele pomocą HQL, oba mają wspólną kolumnę ale table1 wspólny kolumna integer i table2 wspólny kolumna StringJak napisać zapytanie hql z rzutowaniem?

Przykładowo

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b 
where a.id=b.studid 

tutaj a.id JEST integer podczas b.stduid to string, ale dane obu kolumn są takie same.

Jak mogę uzyskać wynik zapytania przy użyciu zapytania hql?

Odpowiedz

2

Po prostu zauważyłem, że używasz JPA, tam nie możesz rzutować ani konwertować datatpów. W języku zapytań można porównywać tylko wartości tego samego typu! czytaj w http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbvu

+0

Tak, moje zapytanie jest nieprawidłowe, ale potrzebuję wyniku dla tego zapytania przy użyciu hql cast ... czy to możliwe? – ver

+0

Myślę, że jest on dostępny tylko w hibernacji, ale używasz JPA? @axtavt daje ci link do dokumentów hibernacji, które są złe, mam rację? – Eduard

55

HQL obsługuje CAST (jeśli bazowy bazy danych obsługuje go), można go używać:

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b 
where cast(a.id as string) = b.studid 

Patrz także:

+1

Dla obsady musiałem użyć w pełni kwalifikowanej nazwy klasy (np. 'Java.lang.String') podczas korzystania z HQL wewnątrz adnotacji' @ Query' dostarczonej przez spring-data-jpa. –

6

Naprawdę musisz pomyśleć, dlaczego masz potrzebę dołączenia do dwóch enti więzi według właściwości różnych typów. Najprawdopodobniej sugeruje, że niektóre jednostki muszą być refaktoryzowane, co może obejmować zmianę typów danych dla kolumn bazowych tabel db. Jeśli model jest poprawny, nie będzie potrzeby przekręcania Hibernate.

+0

Podczas odlewania rozwiąże problem w krótkim okresie, myślę, że 01es ma punkt. Coś jest nie tak, gdy musisz przesyłać identyfikatory. –

Powiązane problemy