0

ユーザーの問題を再現して診断しようとしていますので、ご容赦ください。私は自分で問題を再現することができませんでした。

「User」をPlainOldJava Object(POJO)とします。JavaのクラスとSQLのテーブルです。私の推測/疑惑は、Hibernateトランザクション内で以下を実行した場合です。

User user = (User) hsi.s.load(User.class, userId);
user.setProperty(value);  // this updates one value in this row of the database table

次に、HibernateまたはSQLが「User」のプロパティをデフォルト値にリセットすることがあります。これは私が見ているものについて私が理解できる唯一の説明ですが、私は問題を自分で再現することはできないことを認めます。

HibernateまたはSQLがプロパティをデフォルト値にリセットするようなことが起こっていることを聞いたことがありますか?助けてくれてありがとう!

4

1 に答える 1

1

いいえ。何かが存在することを証明するよりも、何かが存在しないことを証明する方が難しいため、「いいえ」と言うのは難しいですが、これが正しい答えであると確信しています:-)フィールドを設定するコードがない限りデフォルト値に戻ると、Hibernateは常にデータベースにあるものを尊重します。つまり、他のクラスを拡張しないPOJOが実際にあり、デフォルトの引数なしコンストラクターには何も含まれていない場合、プロパティにゲッター/セッターを提供するだけで、他のコードはありません(たとえば、リスナーがそれを変更すると、Hibernateが値をデフォルト値に「戻す」方法はありません。

これが実際に起こっている場合、問題のあるコードを見つける方法についての私の提案は次のとおりです。

1)単純なpersistence.xmlファイル、pojo、およびコマンドラインから実行でき、pojoのプロパティを取得、印刷、更新するJavaクラスを使用して新しいプロジェクトをセットアップします。デフォルト以外の値が定義されている場合は、値をデフォルト値にリセットしないでください。それでも問題が解決しない場合は、データベースでトリガーを確認してください。

2)Hibernateソースをダウンロードし、デバッガーを起動します。JVMを含むものを除いて、すべての命令にステップインします(この場合、それらはあまり役に立ちません)。おそらく、どこかにリスナー、ヘルパーのコード、またはあなたが気付いていない何かが実行されているのを見つけるでしょう。

于 2012-08-10T07:30:12.053 に答える