1. ホーム
  2. ハイバーネート

エラー バッチアップデートが予期しない行数を返しました。

2022-02-25 02:28:12
<パス

エラー バッチアップデートが予期しない行数を返しました。

転載元 http://rmeebh.iteye.com/blog/405774
ブログカテゴリー:ハイバーネート
HibernateBeanBlog
Hibernateの更新例外で一括更新が予期せぬ行数を返す
ERROR [http-8080-Processor22] (BatchingBatcher.java:60) - バッチの実行中に例外が発生しました。
StaleStateException: バッチアップデートが予期しない行数を返しました アップデートから:0 実際の行数。0 予想:1
このエラーの主な原因は次の2つです。
(1) hibernate saveOrUpdate メソッドがインスタンスの保存に使用されています。saveOrUpdate では、SAVE が実行される前に ID が NULL である必要があり、それ以外の場合は UPDATE が実行されます。 インスタンスをnewで保存したが、IDがNULLではないので、UPDATEを使ったが、データベースに主キーに関連する値がないので、例外が発生した場合。

=================================================================
例外あり
挿入時.
StaleStateException: バッチアップデートが予期しない行数を返しました アップデートから:0 実際の行数。0 予想:1
回避策
unsaved-value="null"が設定されている。
を詳しく見ることができます。 http://www.iteye.com/topic/1604
(2) この例外は、Hibernateが1対多、多対1、多対多をマッピングする際に、以下のようなコードで追加されることが多いようです。
Javaコード コレクションコード

public void saveFunctionCell(FunctionCell functionCell, Integer pid) {   
  System.out.println("Now do the add operation");   
  FunctionCell fc = new FunctionCell();   
    try {   
   BeanUtils.copyProperties(fc, functionCell);   
  } catch (IllegalAccessException e) {   
   e.printStackTrace();   
  } catch (InvocationTargetException e) {   
   e.printStackTrace();   
  }   
  fc.setFuncCellID(null);   
  // get parent authority   
  FunctionCell pfc = functionCellDao.findFunctionCellByID(pid);   
  fc.setParentFunctionCell(pfc);   
  functionCellDao.saveFunctionCell(fc);   
}   

豆粒の使い方がポイント!!(笑)。
BeanUtilsがBeanプロパティをコピーすると、すべてのInteger型に0がセットされます。
この解決策は
http://hain.iteye.com/blog/105744
Javaコード集コード

update by id   
if(id==0)   
  StaleStateException: Batch update returned    
unexpected row count from update: 0 actual row count: 0 expected: 1   
else   
  success