2012-03-15 13 views
0

Hibernateの更新テーブルをsession.updateどのようにオブジェクト(データベースから行)をロードし、それを保存することができフィールド値を変更することなく戻ることができます。session.saveせずに同じ値を持つHibernateの更新テーブルまたは同じ値を持つ

ロードした値と同じ値の行に対してUPDATEクエリを発行するには、hibernateが必要です。 私たちは、HibernateとUPDATEを行っている間にデータを変更するJDBCの間にミドルウェアを持っています。

私たちはsession.replicateを試しましたが、そのオブジェクトのすべてのコレクションを削除しています。我々はすべて私たちの関係を失うていることを意味 すなわち

class User{ 
     Set<Order> orders; //inversely mapped 

    } 
    class Order{ 
     User user; 
    } 

while doing session.replicate(user) it is issueing a following SQL 

update ORDER set user=null where id=? 

session.saveまたはsession.updateは、休止状態に移行する前に値を変更していないため、動作しません。

hibernateに、すべてのフィールドが変更されたとみなし、データベースを更新する必要があると考える他の方法はありますか?

+1

なぜ更新を発射する:

は、私はあなたのいずれかを見て、拡張することができると思いますか?または、セッションオブジェクトとDBオブジェクトを同期させたいのですか? – ManuPK

+0

私たちは、HibernateとJDBCの間にミドルウェアを持っています。これは、HibernateがUPDATEとSELECTを行っている間にデータを変更(暗号化と復号化)します。既存の暗号化されていないデータには、このソリューションが必要です。最初にロードしてから再び保存するので、保存中に暗号化します。しかし、これはすべて、値が変更されることを知らないので、休止状態に隠されています。 – Rajesh

答えて

0

プレフラリスナーを実装して、すべてのエンティティを変更し、このクラスに対してdynamicupdate="false"を設定することができます。あなたが値を変更したくない場合は

DefaultFlushEventListener.java 
DefaultFlushEntityEventListener.java 
+0

私はsession.replicateを行う必要がありますか?またはsession.update?上記のリスナーを動作させるために何か他のものを使用しますか? – Rajesh

+0

エンティティがセッションにまだアタッチされていない場合(同じセッションでオブジェクトをロードしたときとは異なります) – Firo

+0

愚かな音で申し訳ありませんが、ドキュメントにpreflushlistenerが見つかりませんでした。 – Rajesh

関連する問題