Hibernate + Gileadアプリケーションの関連オブジェクトで削除される関係
-
27-10-2019 - |
質問
2011年5月11日編集:
以下より少し悪いと思います。デプロイしたQAインスタンスで、メインダッシュボードを何度も更新すると、最終的にユーザーの多対多のグループの関連付けが削除されます。この時点では、サーバー側で呼び出されているのはselectステートメントのみです。うまくいけば、これらの最新のテストで絞り込まれています。
オリジナル:
みなさん、こんにちは。かなり複雑なオブジェクトに問題があります。問題は次のとおりです。保存するオブジェクトをクライアントからサーバーに送信すると、関連するオブジェクトの多対多の関係がランダムに消去されているように見えます。さらに悪いことに、問題を認識してから約2か月後、自分で問題を再現することはできません。 QAグループでテストするためのアプリを用意しています。彼らは毎日プログラムを使用しており、新しいアプリケーションとレガシーアプリケーションを二重に入力しています。問題は1日に3回も発生します。
できる限り詳細を提供するように最善を尽くします。ご覧になってくださった方に感謝いたします。
アプリフレームワークはGWT2.1 + Gilead + Hibernate 3 + MySQLInnoDBです。 Hibernateにカスケードなどを処理させるので、すべての外部キーがDBに設定されていますが、DBには何も定義されていません。
マッピングからの抜粋を次に示します。 ジェネラコディセタグプレ
オブジェクトの保存は、saveOrUpdate()の呼び出しで簡単です: ジェネラコディセタグプレ
Close'updateUser 'は、ユーザーがログインしたときに読み込まれるオブジェクトです。システムがアプリモジュールへのアクセスを許可/拒否できるように、関連するグループと権限が読み込まれます。私はします ジェネラコディセタグプレ
オブジェクトをサーバーに送り返す前。
この種の操作が行われるアプリには他にもたくさんの場所がありますが、望ましくない副作用は発生しません。それはおそらく、Closeオブジェクトに関連付けられたクライアント側のコードの複雑さ、またはむしろそれの私の実装に要約されます。
Hibernateの公式ドキュメントを調べたり、関連する可能性のある問題を探したりするのに多くの時間を費やしてきました。助けを求めるのに良い時期だと思いました。私はそれを維持する必要がありますが、たぶん尋ねるだけでそれを理解するのに役立ちます。
現在、他に何を提供すればよいのかわかりません。うまくいけば、これまでのところここにあるものに関連性があります!
聞いてくれてありがとう!
編集 ジェネラコディセタグプレ
この挿入の直後に削除が行われているようです。前の操作はすべて選択です。ただし、UserにはRecentItemからカスケードするものはありません。
解決
多くの調査の結果、私はいくつかの結論に達し、行動を起こすことができました。最初に、Gileadフォーラムでかなりの検索を行った後、アクティブに維持。もっと早く気づいたはずです。その間、私はRequestFactoryについて読み始め、数日間の調査の結果、これに移行してみることにしました。
これはかなり大きなプロジェクトで、約50のドメインオブジェクトがあり、いくつかは多くのオブジェクトの関連付けがあります。 Gilead + GWT RPCの使用からRequestFactoryの排他的使用まで、すべてを書き直すのに約40〜50時間かかりました。結果として生じるコードと構造の変更にはかなり満足しています。これまでのところ、DTOプロキシオブジェクトを作成する必要はあまりありません。その機会を利用して、Hibernate Annotationsに切り替え、マッピングファイルを削除しました。
RequestFactoryが必要とするフェッチ/編集/保存のサイクルを利用するようにコードをリファクタリングするのは、時々注意が必要でした。それは私にいくつかのコードを改善する機会を与えてくれました。
良いニュースは、問題が解決されたことです。不思議なことに削除される多対多の関連付けはもうありません。私の推測では、Gileadでバグが発生していたか、使用法が正しくなかったか、Annotationsに移行するときに問題が解決した可能性があります。
RequestFactory + Hibernateを学習しているときに、いくつかのすばらしいリソースに出くわしました。その多くはStackOverflowを介して行われました(ありがとうございます):
ObjectifyでのGWTRequestFactoryの使用 --RequestFactoryがバックエンドとどのように相互作用したか、およびコードを削減するためのいくつかのメソッドと定型文を理解するのに最適でした。
以下のリンクがあればいいのですが..私はまだ初心者なので、投稿できるハイパーリンクの数に制限があります:)
私は多くのことを学び、RequestFactoryに堪能になりました。私は目を光らせて、私ができると思うところをここで助けるために最善を尽くします。
StackOverflowに感謝します!