80

多くの場合、Java ログには次のようなものが表示されます。

Caused by: java.sql.BatchUpdateException: failed batch
    at org.hsqldb.jdbc.jdbcStatement.executeBatch(jdbcStatement.java:1102)
    at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(jdbcPreparedStatement.java:514)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
    ... 113 more

完全なスタックトレースを表示する方法を知っている人はいますか (つまり、他の 113 行を表示します)?


ThrowableのJavaDocs (Java 7用) には、何が起こっているかについてかなり詳細な説明があります。

4

6 に答える 6

75

'...113 more' と表示されている場合は、'caused by' 例外の残りの行が、親例外のその時点からの残りの行と同一であることを意味します。

たとえば、次のようになります。

com.something.XyzException
  at ...
  at ...
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
  at ... <the other 113 lines are here>...
Caused by: <the above>.

2 つのスタック トレースは、AbstractBatcher.executeBatch の 242 行目で「出会い」、それ以降の上方呼び出しトレースは、ラッピング例外と同じです。

于 2009-01-13T02:20:22.470 に答える
20

Apache のCommons Langは、入れ子になったスタックトレースを「逆さま」に出力する便利な util メソッドExceptionUtils.printRootCauseStackTrace()を提供します。結果ははるかに直感的です。

元の printStackTrace() メソッドの結果の横に結果が表示される場合、「113 more」行がどこに行ったかが明確になります。

于 2009-01-13T09:41:00.147 に答える
-2

ブログ投稿で、「BatchUpdateException: failed batch」以上のものを取得する方法をhibernate.jdbc.factory_class=org.hibernate.jdbc.NonBatchingBatcherFactory説明しました。休止状態でのバッチ処理を無効にするように設定します。通常は を使用BatchUpdateException.getNextExceptionして失敗の理由を取得できますが、場合によってはnull. 次に、バッチ処理を完全に無効にすると便利です。

于 2012-11-18T23:26:47.167 に答える