如何在 spring aop 中回滚?
how to do rollback in spring aop?
这种情况下如何回滚
我有一个列表,我必须插入整个列表
这是我的服务
@Transactional
@Override
public void saveOrUpdate(List<ETP> etps) {
try {
for (ETP etp : etps) {
if(etp.getAffectation().getMessage()!="Pas bon" || etp.getAffectation().getMessage()!="Pas ok" || etp.getAffectation().getMessage() !="" ){
etpDao.saveOrUpdate(etp);
}
}
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
并且我希望如果此列表中只有一项不符合条件我必须取消交易。
更新
这是我引发异常后的函数
@Transactional(rollbackFor={Exception.class})
@Override
public void saveOrUpdate(List<ETP> etps) {
for (ETP etp : etps) {
if(etp.getAffectation().getMessage().equals("Bon")){
etpDao.saveOrUpdate(etp);
}
else
throw new RuntimeException();
}
}
当条件为 false 时正在生成异常,但所有已执行的操作都未完成回滚。
试试这个解决方案
@Transactional
@Override
public void saveOrUpdate(final List<ETP> etps){
if (cheakETPStatus(etps))
{
for (final ETP etp : etps) {
etpDao.saveOrUpdate(etp);
}
}
}
private boolean cheakETPStatus(final List<ETP> etps){
int count=0;
for (ETP etp : etps){
if (etp.getAffectation().getMessage().equals("Bon"))
count++;
}
return count==etps.size();
}
这种情况下如何回滚
我有一个列表,我必须插入整个列表
这是我的服务
@Transactional
@Override
public void saveOrUpdate(List<ETP> etps) {
try {
for (ETP etp : etps) {
if(etp.getAffectation().getMessage()!="Pas bon" || etp.getAffectation().getMessage()!="Pas ok" || etp.getAffectation().getMessage() !="" ){
etpDao.saveOrUpdate(etp);
}
}
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
并且我希望如果此列表中只有一项不符合条件我必须取消交易。
更新
这是我引发异常后的函数
@Transactional(rollbackFor={Exception.class})
@Override
public void saveOrUpdate(List<ETP> etps) {
for (ETP etp : etps) {
if(etp.getAffectation().getMessage().equals("Bon")){
etpDao.saveOrUpdate(etp);
}
else
throw new RuntimeException();
}
}
当条件为 false 时正在生成异常,但所有已执行的操作都未完成回滚。
试试这个解决方案
@Transactional
@Override
public void saveOrUpdate(final List<ETP> etps){
if (cheakETPStatus(etps))
{
for (final ETP etp : etps) {
etpDao.saveOrUpdate(etp);
}
}
}
private boolean cheakETPStatus(final List<ETP> etps){
int count=0;
for (ETP etp : etps){
if (etp.getAffectation().getMessage().equals("Bon"))
count++;
}
return count==etps.size();
}