gpt4 book ai didi

java - 如何判断 JPA 保存方法采取了什么操作

转载 作者:行者123 更新时间:2023-12-02 11:21:14 25 4
gpt4 key购买 nike

我有一个仓库:

public interface SomeRepository extends CrudRepository<SomeClass, Long> {
SomeClass findById(Long id);
}

我需要将对象保存到其中:

SomeClass someClass = GetAMaybeNewSomeClass();
someClass = someRepository.save(someClass);

如何在代码中判断保存调用执行了什么操作?我需要知道数据库中是否已经存在 someClass,如果确实存在,我需要知道调用 save 是否实际上改变了它。

我可以通过在保存操作之前调用 findById 并将找到的内容与正在保存的内容进行比较来做到这一点,但我宁愿使用框架中内置的内容(如果存在)。

最佳答案

Spring 中的save 操作结合了persistmerge 方法,source code该方法的内容是:

@Transactional
public <S extends T> S save(S entity) {

if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}

因此,我认为,当您调用 save 方法时,确切地知道框架会执行什么操作,所以如果您确实需要知道,您应该直接从 JPA 或使用 persist 和 merge 方法创建您自己的方法。

更新:

您还可以使用existsById来自 CrudRepository 的方法

关于java - 如何判断 JPA 保存方法采取了什么操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49907874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com