2

Hibernate は、エンティティ内の静的プロパティと動的プロパティの組み合わせをサポートしていますか。例えば

public class User
{  
  private Long id;  
  private String first_name;  
  private String last_name;  
  private Map<String,Object> dynamicProperties;  
}

実行時に Db から User テーブルのメタデータを読み取ることで、動的プロパティを取得できます。基本的に、複数のクライアントをサポートする製品に取り組んでいます。

id1 つのクライアントの場合、 User テーブルには、のような列のみを含めることができますが、別のクライアントの場合first_name、 User テーブルにはおよびlast_nameのような 2 つの追加列を格納する必要があります。DOBTitle

を考慮しid、すべてのクライアント間で共通のプロパティのセットとして、それらを静的プロパティとして使用し、エンティティにマップとして保存する予定です。休止状態がこれをサポートしているかどうかはわかりません。first_namelast_name

制約は、コードが実行時にのみ動的プロパティ列を認識することです。

4

2 に答える 2

0

あなたのマッピング戦略を検討する必要があると思います。休止状態では、スキーマを静的にする必要があります。dynamicProperties の名前を metaData に変更し、マップに文字列キーと文字列値を持たせてから、それをマップされたプロパティとして hibernate マッピング ファイルに含めることをお勧めします。マップされた hibernate にジェネリック オブジェクト値のマップを持つことは意味がありません。もう 1 つの方法は、そのマップを @transient としてマークすることですが、最初の提案の方が理にかなっていると思います。クライアント固有のメタデータが必要なため、スキーマの一部としてマップします。

于 2012-12-19T01:57:42.923 に答える
0

私が取り組んでいるプロジェクトはまさにこれを行います (動的なクライアントごとのモデル)。ただし、静的 (クラスベース) エンティティと動的エンティティを同じ行に混在させようとはしません。モデルの静的部分を動的部分から分離し、静的部分をクラスに、動的部分を EntityMode.MAP エンティティにマップすることで、必要なことを簡単に行うことができます。EntityMode.MAP で JPA 基準クエリを使用できるようにするHibernate 4.1 用のパッチを提出しました。これにより、動的クエリの生成がはるかに簡単になります。

于 2013-02-26T15:15:09.410 に答える