2013-11-25 15 views
8

Javaアプリケーションでは、JPAを使用してOracleデータベースに格納されている情報を取得したいと考えています。 私のデータベースには私がいくつかの他のテーブルから得た一連の列を持つビューがあります。私はそのビューをマップしたい。ただし、ビューには主キーがないため、JPAエンティティを作成することはできません。私はの2列をForeign Keysとして使うと考えました。JPAエンティティへの主キーがないSQLビューのマッピング

これを実装する最善の方法は何ですか?私は非常に多くの異なるアプローチを見てきましたが、このケースではどちらが最適かはわかりません。

答えて

6

一つの方法だけで、適切なフィールドに@Idアノテーションを追加することにより、複合主キーを使用している:私は何かのように、ラッパークラスでの作業むしろお勧めします。

+1

ありがとう、コンポジットプライマリキー(@IdClassアノテーション付き)を使用して問題を解決しました。 – user2144555

+0

ありがとうございますこれは解決策です@ビューを追加して私の問題を解決、私はArquillianを使用しているので、私はビューのエンティティを追加し、主キーを追加する別のフィールドを追加する – cabaji99

3

最善の方法はありません。これはビューなので、その中にデータを挿入することはありません。つまり、既存のフィールドの上にプライマリキーを定義するだけです。また、そのフィールドにinsertable=false, updatable=falseとマークすることもできます。

UPDATE

あなたはあなたのデータをよく知っている

が、なぜあなたは一般回避でからエンティティと直接作業しなければならないされますが、すべてのレコードが一意であることを保証することはできませんビューで一般、ビュー。これを解決する

SELECT new com.domain.MyWrapper(field1, field2, field3, field4,...) FROM ViewEntity 
+1

プライマリキーとして設定されたフィールドの内容が等しい表の行についての情報を取得すると機能しません。エラーは表示されませんが、情報は変更されます。 – user2144555

+0

レスポンスを更新しました。 –

+0

私は以前あなたの答えを見たことがあるなら、私は決してデータベースを見て、それをエンティティとしてマップしません。一意性が私のアプリレポートを殺したので、私はそのことでプロジェクトをあきらめました。ありがとうございました – ViniciusPires

関連する問題