データベースビューを使用して複数のクラスを同時に選択しようとしています。どちらの表にも「ID」のような類似の列があります。したがって、ビューはエイリアスで動作しています。 残念ながら、Hibernateは "ID"フィールドを正しくマップしません。ここでHibernate SQLQuery:複数のエンティティとエイリアス化された列名を持つデータベースビュー
簡単な例:
Species Cat
| ID | Name | | ID | Name | SpeciesId
+----+--------------+ +----+--------------+---------
| 1 | Tuxedo cat | | 1 | Sylvester | 1
| 2 | Sylvester Jr | 1
| 3 | Sylth Vester | 1
これらのテーブルには、次のビュー
CREATE VIEW 'CatsBySpecies' AS
SELECT
SPECIES.ID,
SPECIES.NAME,
CAT.ID AS CAT_ID,
CAT.NAME AS CAT_NAME
FROM SPECIES
LEFT JOIN CAT ON CAT.SPECIESID = SPECIES.ID;
クエリの結果につながる可能性は正しいです:
|ID| Name | CAT_ID | CAT_NAME |
+--+----------+--------+--------------+
|1 |Tuxedo cat| 1 | Sylvester |
|1 |Tuxedo cat| 2 | Sylvester Jr |
|1 |Tuxedo cat| 3 | Sylth Vester |
これまでのところ、そう良い。
にHibernateクエリ:クラスが正しくマップされていない
String select = "Select * from CatsBySpecies";
catQuery = persistentSession.createSQLQuery(select).addEntity(Species.class).addEntity(Cat.class);
Iterator<?> pairs = catQuery.list().iterator();
しかし、結果タプルはこの
Species: Cat:
ID = 1 ID = 1
Name = Tuxedo cat Name = Tuxedo cat
のように見えるので、Hibernateは対応れる列名を認識しているようだし、オブジェクトにそれらを比較します - 属性。
エイリアスをマッピングする方法を休止状態にする方法はありますか? 残念ながら、テーブルにはもっと多くのカラムがあるので、database-resultの各カラムに対してaddScanを避けようとしました。
ヒントやご提案をお待ちしております。