0

問題は、別のDBにクエリを実行するアプリケーションがあり、一部のエンティティに列がないことです。継承を使用せずに欠落している列を無視する方法はありますか?

4

1 に答える 1

8

ニーズに応じて、さまざまな可能性があります。

  1. 一部のデータベースにのみ存在するこれらの余分な列がまったく必要ない場合は、マッピング (または注釈) でそれらを定義しないだけです。その後、それらは Hibernate によって読み取られることはなく、挿入時に列が null に設定されます (null 以外の値が必要な場合は、データベースでデフォルト値またはトリガーを定義できます)。

  2. 追加の列が存在するときにそれらが必要な場合は、データベースごとに異なるマッピングが必要です。この場合、xml マッピング ファイルを使用することをお勧めします。とにかく、データベースごとに個別の hibernate.cfg.xml があります (接続文字列はそこにあります)。ここでは、異なる列を持つテーブルに対して、異なるマッピング ファイル (タグ<mapping resource="..." />) を指定します。Java pojo、つまり Java クラスは、すべてのデータベースで同じであり、任意のデータベースに存在するすべての列が含まれていますが、データベース固有のマッピング ファイルでは、それらの列をそのデータベースに実際に存在する Java メンバーにのみマップします。(アノテーションを使用すると、データベースごとに異なる Java クラスが必要になり、コードでロジックを処理する必要があるため、これは面倒です。)

  3. テーブルが読み取り専用の場合は、そのテーブルに対してデータベース ビューを定義し、このビューで欠落している列にデフォルト値を提供できます。次に、Hibernate で、テーブルではなくビューをマップします。

于 2013-03-08T09:57:50.557 に答える