0

これと同じ種類の質問です。NHibernateではなく通常のHibernateでのみNHibernateを使用して既存のエンティティにデータを入力します。また、その質問はIMOに完全には答えられていませんでした。

要約すると、(休止状態で)以前に接続されたエンティティによって新しいエンティティを埋める/入力することは可能ですか?何かのようなもの:

daoService.getEntityManager().find(Student.class, 123L); 
Student student = new Student(123) // Creating a new student

daoService.fill(student);

その結果、studentインスタンスは、エンティティマネージャーによって検出された値とまったく同じ値になります。

(指定されたインスタンスを埋める代わりに)新しいインスタンスを返すため、mergeを使用できません。また、IDが既にアタッチされているエンティティに属している場合はload()を使用できません。コードをすべてのエンティティに汎用的にしたいので、値を手動で設定するだけでは実用的ではありません。すべての潜在的な落とし穴(遅延初期化、継承、対応するsetメソッドのないgetメソッド、およびその逆など)があるため、このコンテキストではrefelectionを使用したくありません。

私はJPAエンティティと非エンティティ(JDBCを使用)の両方を使用するレガシーシステムに取り組んでいますが、これによりいくつかの大きな問題を解決できます。

助けてくれてありがとう!

4

1 に答える 1

0

私は頭のてっぺんを書いているので、構文は完全に正確ではありません

Student student = new Student();

metadata = factory.getClassMetaData(Student.class);

metadata.getIdproperty();
// copy id

for(Property prop in metadata.getPropertyClosureIterator)
{
    prop.setValue(student, prop.getValue(managedStudent));
}
于 2012-05-25T07:03:18.710 に答える