如果在持久化实体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
,但无济于事。
这里有什么可以做的吗? 感谢
答案 0 :(得分:0)
使用AOP记录此类异常似乎是正确的选择。