spring-data-jpa 记录Spring/Hibernate事务中受影响的项目数

hgqdbh6s  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(72)

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

@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代码已执行并删除了数百行。
谢谢你的建议!

watbbzwu

watbbzwu1#

这个问题正如@XtremeBaumer正确指出的那样,如果你只是用一个delete语句运行executeUpdate,它将返回受影响的行数。
但这不是您要做的。您正在执行由beginend分隔的代码块。可能有一种方法可以让这样的代码块返回一个值,但这需要编码到代码块中,并且可能是高度特定于数据库的。

相关问题