我有一个从另一个服务调用的方法:
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void execute(String sql) {
Query query = entityManager.createNativeQuery(sql);
query.executeUpdate();
}
基本上,客户端加载多个sql文件,并在新事务中运行每个sql文件,以便不影响其他文件的执行。
例如,这是一个SQL文件的示例,该文件正在清理一些数据:
begin;
delete from table t where t.created_at < current_date - interval '2 month';
commit;
我尝试做的是记录每个事务的结果。例如,这里,我想显示删除了多少条记录。我如何从Spring中做到这一点?我知道您可以使用以下命令记录更具体的内容:
logging.level.org.springframework.transaction=TRACE
,但我仍然看不到任何结果。这显示了有关将运行的sql以及事务何时开始/结束的信息。
第二个解决方案是检查以下结果:
int count = query.executeUpdate();
,但count为0,即使SQL代码已执行并删除了数百行。
谢谢你的建议!
1条答案
按热度按时间watbbzwu1#
这个问题正如@XtremeBaumer正确指出的那样,如果你只是用一个delete语句运行
executeUpdate
,它将返回受影响的行数。但这不是您要做的。您正在执行由
begin
和end
分隔的代码块。可能有一种方法可以让这样的代码块返回一个值,但这需要编码到代码块中,并且可能是高度特定于数据库的。