1. ホーム
  2. Java

メソッド起動時に InvocationException が発生しました。

2022-02-26 07:19:17

com.sun.jdi.InvocationException がメソッドを呼び出す際に発生しました。

2014-11-24 11:48

<スパン 6802人が読んだ
コメント (2) ブックマーク 報告書
カテゴリー

著作権について この記事はブログのオリジナル記事であり、ブログ管理者の許可なく複製することを禁じます。

先日、次のようなエラーメッセージが表示される問題に遭遇しました。


<スパン 習慣的にググって解決策を探した結果、ほとんどの記事、ブログで ハイバネート この問題はレイジーローディングが原因なのですが、面白いことに、その解決策として lazy="false" とします。

<スパン <スパン 症状を治療しても根本的な解決にならないこの解決策には、笑わずにはいられません。

<スパン エラーメッセージをよく見てみると、ID [4028810749dfa59c0149dfaf16810004] を持つ OrgInfo オブジェクトが存在しないという、実はごく当たり前のバグであることがわかりました。

<スパン そこでデバッグしてみると、OrgInfoModifyがここでOrgInfoオブジェクトを取得する際に、その値がcom.sun.jdi.InvocationExceptionが発生してメソッドを起動したことが問題の原因であることがわかりました。

<スパン <スパン

  1. について  (OrgInfoModify orgInfoModify : modifyList) {。  
  2.     OrgInfo orgInfo = orgInfoModify.getOrgInfo()です。  
  3. もし  (orgInfo !  ヌル ) {  
  4. もし (!groupOrgId.equals(orgInfo.getObjId())) {  
  5.             resList.add(orgInfoModify)を実行します。  
  6.         }  
  7.     }  
  8. }  

書き忘れましたが、二次開発なのでソースコードにあまり詳しくなく、問題のある特定のモジュールのコードスニペットを見に行くしかありません。

そこで、OrgInfoModifyのソースコードを見てみると、OrgInfoModifyはOrgInfoと一対一の関係であることがわかります。

<スパン <スパン

  1. /** 機関 */
  2. ManyToOne (フェッチ=FetchType.LAZY, オプション= )  
  3. ジョインカラム (名前= ORG_INFO_ID" // 外部キーの関連付け
  4. バッチサイズ (サイズ =  15

    // バッチクロール
  5. プライベート  OrgInfo orgInfo;  

つまり、エラーメッセージからすると OrgInfoテーブルでID [4028810749dfa59c0149daf16810004]のレコードを見つけるには、レコードが存在しないので、遅延ロードは、オブジェクトが正常にロードするために失敗する原因となる。

この時点で、エラーの原因は明らかです。次のステップは、欠落しているデータを修正することであり、多くのウェブで言われているように lazy プロパティを false に設定することではありません。