2011-12-15 7 views
2

私はビュー(次のように定義される)からのデータを選択するために、休止状態を使用しています:Hibernateが更新句を生成する原因は何ですか?

from test where trim(id)='1111' 

が、休止状態は、次の更新句を生成します。

update test set id=?, dd=? where id='1111' 

誰でもどんな提案を持っていますか?それは、それが休止状態のバグだと思われる?

+1

あなたがやっていることを示すために、いくつかのコードを追加してくださいすることができ:これらは

も見る適切な場所に、あなたの.hbm.xmlファイルに「更新= false」を設定することで、時には固定することができます。 ? – Manish

+0

私はテストテーブルからデータベースを選択したい、コードは私のhsqlです:テストからどこtrim(id)= '1111'; – MemoryLeak

答えて

2

Hibernateは時々あなたのためにアップデートを生成することがあります!

これは、たとえば、オブジェクトの状態がデータベースと同期していない場合などに発生します。必要に応じて、この動作をオーバーライドすることができます(下記の第2の箇条参照)。しかし、しばしば、アプリケーションのロジックにいくつかの間違いが生じることがあります。あなたのケースでは

:これが起こってすることができます2つの理由があります:

1)HibernateはあなたがHQLに基づいて、あなたのマッピングファイル内のフィールドを設定するためのpublicメソッド(つまりゲッターとセッター)をイントロスペクトそれを入力として送信します。だから...これはあなたの問題にどのように影響しますか?まあ... Java Beanのゲッターに洗練されたロジックがある場合、そのロジックは、これらのメソッドが呼び出されているので、最終的にこの呼び出しを行うときに、いくつかの更新を生成するためにhibernateを引き起こす可能性があります。

2)selectステートメント(つまり、ダーティトランザクション)を呼び出すと、Hibernateが更新されるという既知のコーナーケースがいくつかあります。 Using Enum in Hibernate causes select followed by an update statement

関連する問題