2011-01-25 17 views
35

Iの両方が共通の列を有しているが、table1共通の列は、integertable2共通の列であり、HQL使用して2つのテーブルを結合する必要があるが、例えばStringキャストでhqlクエリを書くにはどうすればいいですか?

あり、ここ

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 

a.idb.stduid一方integerありますstringですが、両方の列のデータは同じです。

hqlクエリを使用してクエリの結果を取得するにはどうすればよいですか?

答えて

2

ちょうどJPAを使用していることに気付きました。そこでは、データセットをキャストまたは変換することはできません。クエリ言語では、同じ型の値だけを比較できます。 (基礎となるデータベースがサポートしている場合)HQLはCASTをサポートhttp://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbvu

+0

はい私のクエリは間違っていますが、hqlキャストを使用してこのクエリの結果が必要です...可能ですか? – ver

+0

私はそのポーズは休止状態でしかないと思いますが、あなたはJPAを使用していますか? @axtavtは間違ったドキュメントを休止状態にするリンクを提供しています。 – Eduard

55

に読み、あなたがそれを使用することができます。

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 

も参照してください:

+1

キャストでは、spring-data-jpaで提供される@ Queryの注釈の中でHQLを使用するときに、完全修飾クラス名(例:java.lang.String')を使用する必要がありました。 –

6

あなたは本当になぜあなたは2つのentiに参加する必要があると思う必要があります異なるタイプの特性によって結びついている。ほとんどの場合、リファクタリングする必要があるエンティティの一部があります。これには、基礎となるdbテーブルの列のデータ型を変更することが含まれます。モデルが正しければ、Hibernateをねじる必要はありません。

+0

キャスティングはあなたの問題を短期間で解決しますが、私は01esにはポイントがあると思います。あなたがIDをキャストする必要があるとき何かが間違っているようです。 –

関連する問題