记录Spring/Hibernate事务中受影响的项目数



我有一个从另一个服务调用的方法:

@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;

我想做的是记录每个交易的结果。例如,在这里,我想显示删除了多少记录。从春天开始我该怎么做?我知道你可以用记录一些更具体的东西

logging.level.org.springframework.transaction=TRACE

,但我仍然看不到任何结果。这将显示有关将运行的sql以及事务何时开始/结束的信息。

第二个解决方案是检查的结果

int count = query.executeUpdate();

,但是count是0,即使sql代码已经执行并删除了数百行。

提前感谢您的建议!

问题是@XtremeBaumer正确地指出了您的脚本。如果您只是使用delete语句运行executeUpdate,它将返回受影响的行数。

但这不是你要做的。您正在执行由beginend分隔的代码块。可能有一种方法可以让这样的代码块返回值,但这需要编码到代码块中,并且可能是高度特定于数据库的。

最新更新