java 事务处理 try catch_java-在@Transactional内的try-catch中提交更改

考虑一下我有一个方法以ActiveRecord模式样式执行一些工作和日志记录机制:

@Transactional

public void doSmt() {

try {

someOperation(); // can throw exception

Logger.logIntoDb(); // if everything is OK

} catch {Exception e} {

Logger.logIntoDbWithException(e.getMessage()); // log error into db

throw new MyCustomException(e);

}

}

public static void logIntoDbWithException(String message) {

final LogEntry logEntry = new LogEntry();

logEntry.setDate(new Date());

logEntry.setMessage(message);

logEntry.persist();

}

在失败的情况下,我想保留一条错误消息,但是如果我抛出异常,catch子句中的事务将被回滚并且我的LogEntry将不会保留.我看到的唯一方法是在persist()之后手动调用flush().

有没有更干净的解决方案来执行此操作?

谢谢.

UPD:

由于我有一个执行持久化的静态方法,因此我需要对接受的答案应用以下技巧:

public static void logIntoDbWithException(String message) {

new Runnable() {

@Transactional(propagation = Propagation.REQUIRES_NEW)

public void run() {

final LogEntry logEntry = new LogEntry();

logEntry.setDate(new Date());

logEntry.setMessage(message);

logEntry.persist();

}

}.run();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值