私はデータベース移行ツールを作成しており、非常に扱いにくいソースデータベースを扱っています。それは基本的に40-50列以上の巨大なテーブルの1つです。ただし、これらの列のすべてが私にとって有用なわけではありません。私はたぶん数十人ほどしか望んでいない。私がそのデータを取得すると、移行先の終わりのすべてを処理するWebサービスへのリクエストを作成しています。テーブルの一部のカラムにのみマッピングするエンティティを持つことはできますか?
私のオプションでは、基本的に手動でクエリを作成して、必要な列のみを選択するか、必要な列をマップするエンティティを作成します。私はJPAの使用に慣れていないので、これが可能かどうかわかりません。
データベース内の列がある場合、私は
@Entity
class SomeEntity{
@Column(name = "ColumnA")
private String columnA;
@Column(name = "ColumnB")
private String columnB;
}
ような何かを行うことができ、例えば
Column A | Column B | Column C | Column D
はEclipseLinkのマップは、私は注釈を付けたり、それが中に列をマップしようとして文句を言うだけの列ウィル私のエンティティに存在しないフィールドへのdb? @Transientは永続化すべきではないフィールドをマークします。しかし、私は逆を行い、データベースの列を無視して、テーブルをクラスに部分的にしかマップしません。
読み取り専用の場合は、複数の列のみをエンティティにマップできますが、問題はありません。取得されるのは、 '@ Entity'で宣言したカラムだけです。安全のためには、アプリケーションレベルで不変性を強制するためにセッターを 'protected 'にしてください。 –
基本的にはyesですが、いずれにしても '@ Id'(または同等のもの)を定義する必要があります。受け入れられた答えに示唆されているように、データベースレベルのビューを作成する必要はありません。 – stg