問題は、別のDBにクエリを実行するアプリケーションがあり、一部のエンティティに列がないことです。継承を使用せずに欠落している列を無視する方法はありますか?
1 に答える
ニーズに応じて、さまざまな可能性があります。
一部のデータベースにのみ存在するこれらの余分な列がまったく必要ない場合は、マッピング (または注釈) でそれらを定義しないだけです。その後、それらは Hibernate によって読み取られることはなく、挿入時に列が null に設定されます (null 以外の値が必要な場合は、データベースでデフォルト値またはトリガーを定義できます)。
追加の列が存在するときにそれらが必要な場合は、データベースごとに異なるマッピングが必要です。この場合、xml マッピング ファイルを使用することをお勧めします。とにかく、データベースごとに個別の hibernate.cfg.xml があります (接続文字列はそこにあります)。ここでは、異なる列を持つテーブルに対して、異なるマッピング ファイル (タグ
<mapping resource="..." />
) を指定します。Java pojo、つまり Java クラスは、すべてのデータベースで同じであり、任意のデータベースに存在するすべての列が含まれていますが、データベース固有のマッピング ファイルでは、それらの列をそのデータベースに実際に存在する Java メンバーにのみマップします。(アノテーションを使用すると、データベースごとに異なる Java クラスが必要になり、コードでロジックを処理する必要があるため、これは面倒です。)テーブルが読み取り専用の場合は、そのテーブルに対してデータベース ビューを定義し、このビューで欠落している列にデフォルト値を提供できます。次に、Hibernate で、テーブルではなくビューをマップします。