40

私は現在Eclipselinkを使用していますが、ほとんどのJPA実装がかなり標準化されていることを知っています。JPAエンティティをビューにマップするネイティブな方法はありますか? 私は挿入/更新を検討していませんが、問題は実際に @Id アノテーションを処理する方法です。JPA の世界のすべてのエンティティには ID フィールドが必要ですが、私が作成したビューの多くはこれに準拠していません。JPAでこれに対するネイティブサポートはありますか、それとも機能させるためにハックを使用する必要がありますか? 私はたくさん検索しましたが、これを行うことに関する情報はほとんど見つかりませんでした。

4

4 に答える 4

8

@Id直接サポートされているタイプのフィールドでアノテーションを使用することは、エンティティーの ID を指定する唯一の方法ではありませんが ( @IdClasswith 複数の@Idアノテーションまたは@EmbeddedIdwith を参照@Embedded)、JPA 仕様ではエンティティーごとに主キーが必要です。

つまり、データベース ビューで JPA を使用するためにエンティティは必要ありません。ビューへのマッピングは、SQL の観点から見たテーブルへのマッピングと変わらないため、代わりにネイティブ クエリ ( createNativeQueryon EntityManager) を使用してスカラー値を取得できます。

于 2009-03-13T22:02:00.707 に答える
0

私はこれを自分で調べてきました.100%確実に機能するわけではありませんが、有望に見えるハックを見つけました.

私の場合、PK として効果的に機能できるビューに FK 列があります。その外部オブジェクトの特定のインスタンスは、ビュー内で 1 回しか発生しません。その 1 つのフィールドから 2 つのオブジェクトを定義しました。1 つは ID に指定され、フィールドの生の値を表し、もう 1 つは読み取り専用に指定され、参照されるオブジェクトを表します。


@Id
@Column(name = "foreignid", unique = true, nullable = false)
public Long getForeignId() {
...

@OneToOne
@JoinColumn(name = "foreignid", insertable=false, updatable=false)
public ForeignObject getForeignObject() {
...

私が言ったように、私はこれについて100%確信が持てません(そして、うまくいかないことが判明した場合は、この回答を削除します)が、コードが特定のクラッシュポイントを超えました.

ただし、それがあなたの特定の状況に当てはまるかどうかはわかりません。そして、11か月後には気にしなくなる可能性が非常に高くなります. :-) なんてこった、その「ネクロマンサー」バッジはそれだけでは稼げない....

于 2010-02-04T22:57:52.093 に答える