2009-05-20 7 views
1

私は永続オブジェクトのインスタンスを持っている、と私はそうのように一部のメンバーを設定した場合:永続性インスタンスが設定されていても変更されていない場合は、データベースを休止状態にしますか?

MyThing thing = session.get(MyThing.class, id); 
thing.setSomething(thing.getSomething()); 
session.update(thing); 

が、これは実際にレコードを更新するためにSQLのupdateコマンドを発行する冬眠原因でしょうか?または、オブジェクトが更新されたことを知るのに十分な休止状態ですが、値は実際には変更されていませんか?

+0

あなたがここに休止状態またはJPAとHibernateを純粋使用していますか? –

答えて

2

一般に、プロパティ値が等しい場合は更新を発行しないでください。 (具体的には、型の実装に従ってequalを比較します。通常は、equals(Object)メソッドと同じです)。

nemoが正しければ、常にHibernateのSQLが何を実行しているのか知っておくべきです。 「show_sql」プロパティを使用するのではなく、「org.hibernate.SQL」ロガー(Hibernate 2の場合は「net.sf.hibernate.SQL」)をDEBUGレベル(log4j)に設定することをお勧めしますが(System.outまたはSystem.err iirc)。

(私はあなたがsession.flush()を意味だと思いますが、ないsession.update(thing) ...あなたはステートレス・セッションを使用している場合を除き?)

1

私は、オブジェクトが変更されていないことを認識して、更新を避けるほどスマートになると信じています。

確実に言う方法は、HibernateのSQL出力をオンにすることです。 Add

<property name="hibernate.show_sql">true</property> 

hibernate.cfg.xmlのhibernate-configurationのsession-factoryセクションに移動します。

0

AFAIKでは、SQLコマンドは実行されません。

関連する問題