1

同じスキーマを持つ 2 つのデータベースがあります。ローカル データベース A と中央データベース B です。

  1. データベースAからのセッションのクエリ(いくつかの基準あり)
  2. 新しく生成された ID を持つ新しいエントリとして選択データをデータベース B に挿入します。

例: セッション エンティティは id を生成し、また id を生成した testingData への ManyToOne 関係を持っています。

@Id
@Column(name = "ID", nullable=false)
@GeneratedValue(strategy = GenerationType.TABLE)
public long getDatabaseIdentifier()
{
    return databaseIdentifier;
}

それを行うための最も効率的な方法は何ですか?新しいエンティティを作成したり、コピー コンストラクターを使用したりしたくありません。私は使用しようとしましExample.create(session).excludeProperty("databaseIdentifier")たが、運がありませんでした。

前もって感謝します...

4

1 に答える 1

0

新しいオブジェクトをインスタンス化する必要があります (おそらくコピー コンストラクター アプローチを使用します)。問題は、Hibernate から返されたオブジェクトがプロキシされ、その結果、セッションに関連付けられることです (ある時点で LazyInitializationException を受け取ったことがありますか?)

したがって、 DB Aに関連付けられた休止状態で拡張されたオブジェクトから、どの DB にもリンクされておらず、 DB Bに挿入できるバニラ オブジェクトにプロパティをコピーする必要があります。


アップデート

以下を試すことができますが、うまくいくかどうかはわかりません

  • EntityManager.detach(obj) を呼び出してオブジェクトをデタッチします。
  • オブジェクトから ID を削除します
  • 他のエンティティ マネージャでオブジェクトを保存する

繰り返しますが、detach() がオブジェクトを永続コンテキストから削除するため、これが機能するかどうかはわかりませんが、それでも拡張オブジェクトです。

于 2012-05-17T12:52:49.880 に答える