2016-03-23 5 views
0

私はデータベース移行ツールを作成しており、非常に扱いにくいソースデータベースを扱っています。それは基本的に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は永続化すべきではないフィールドをマークします。しかし、私は逆を行い、データベースの列を無視して、テーブルをクラスに部分的にしかマップしません。

+2

読み取り専用の場合は、複数の列のみをエンティティにマップできますが、問題はありません。取得されるのは、 '@ Entity'で宣言したカラムだけです。安全のためには、アプリケーションレベルで不変性を強制するためにセッターを 'protected 'にしてください。 –

+0

基本的にはyesですが、いずれにしても '@ Id'(または同等のもの)を定義する必要があります。受け入れられた答えに示唆されているように、データベースレベルのビューを作成する必要はありません。 – stg

答えて

1

ビューを作成する必要があります。関連性があると見なして、多くの列を保持します。それらの列をクラス内のフィールドとして定義し、それらを通常どおりに休止状態の注釈で配線します。ただし、ビュー上でのみ選択を実行できることに注意してください。挿入/更新/削除は問題ありません。

+0

大量のテーブルは読み込み専用なので、実行するselectだけが問題ありません。ビューの内容を詳しく説明できますか?上記の例ではどうなりますか? – JMD83

+1

@ JMD83 wiewsはDBレベルで作成されますが、いくつかのテーブルを結合する必要がなければ、実際には必要ありません。 –

関連する問題