0

エンティティ X の永続化中に例外がスローされた場合、catch ブロックで別のメソッドを呼び出してエンティティ Y を永続化できますか?

@Transactional(propagation = Propagation.REQUIRED)
private X addNewX(X transientX) {
    X x = null;
    try {
        x = xDao.makePersistent(transientX); // A DB constraint will be violated and Hibernate throws PersistenceException
    } catch (RuntimeException e) {
        createErrorRecord(transientX, e.getMessage());
    }
    return x;
}

エラーに関する追加情報を保存します。

@Transactional(propagation = Propagation.REQUIRED)
private void createErrorRecord(X x, String errMsg) {
    try {
        ImportError error = new ImportError(x.getBlah(), x.moreBlah(),
                errMsg);
        impErrDao.makePersistent(error);
    } catch (RuntimeException re) {
        logger.error(re.toString());
    }
}

ただし、ImportError永続化されることはありません。ためしてみnoRollbackForましPersistenceExceptionたが無駄でした。

ここで何かできることはありますか?ありがとう

4

1 に答える 1

0

このような例外をログに記録するために AOP を使用することは、適切なオプションのようです。

于 2013-07-20T17:09:10.750 に答える