私はビュー(次のように定義される)からのデータを選択するために、休止状態を使用しています:Hibernateが更新句を生成する原因は何ですか?
from test where trim(id)='1111'
が、休止状態は、次の更新句を生成します。
update test set id=?, dd=? where id='1111'
誰でもどんな提案を持っていますか?それは、それが休止状態のバグだと思われる?
私はビュー(次のように定義される)からのデータを選択するために、休止状態を使用しています:Hibernateが更新句を生成する原因は何ですか?
from test where trim(id)='1111'
が、休止状態は、次の更新句を生成します。
update test set id=?, dd=? where id='1111'
誰でもどんな提案を持っていますか?それは、それが休止状態のバグだと思われる?
Hibernateは時々あなたのためにアップデートを生成することがあります!
これは、たとえば、オブジェクトの状態がデータベースと同期していない場合などに発生します。必要に応じて、この動作をオーバーライドすることができます(下記の第2の箇条参照)。しかし、しばしば、アプリケーションのロジックにいくつかの間違いが生じることがあります。あなたのケースでは
:これが起こってすることができます2つの理由があります:
1)HibernateはあなたがHQLに基づいて、あなたのマッピングファイル内のフィールドを設定するためのpublicメソッド(つまりゲッターとセッター)をイントロスペクトそれを入力として送信します。だから...これはあなたの問題にどのように影響しますか?まあ... Java Beanのゲッターに洗練されたロジックがある場合、そのロジックは、これらのメソッドが呼び出されているので、最終的にこの呼び出しを行うときに、いくつかの更新を生成するためにhibernateを引き起こす可能性があります。
2)selectステートメント(つまり、ダーティトランザクション)を呼び出すと、Hibernateが更新されるという既知のコーナーケースがいくつかあります。 Using Enum in Hibernate causes select followed by an update statement
あなたがやっていることを示すために、いくつかのコードを追加してくださいすることができ:これらは
も見る適切な場所に、あなたの.hbm.xmlファイルに「更新= false」を設定することで、時には固定することができます。 ? – Manish
私はテストテーブルからデータベースを選択したい、コードは私のhsqlです:テストからどこtrim(id)= '1111'; – MemoryLeak