エンティティ 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
たが無駄でした。
ここで何かできることはありますか?ありがとう