2

我知道对于它的当前版本(2.x.x),spring-data-commons保证返回值CrudRepository.save()永远不会为空。但是,旧版本,特别是1.13.18.RELEASE呢?

如果旧版本确实保证返回非空值,那么它会使下面的代码无用,对吧?

        Entity savedEntity = someRepository.save(entity);
        if (savedEntity == null) {
            // throw some checked exception stating that the save failed..
        }

而如果旧版本不保证返回非空值,那么什么情况下会导致返回空值呢?

更新CrudRepository:由于我的问题1.11.18.RELEASEspring-data-jpa. 我想知道这个版本的保存功能的行为。

4

2 回答 2

1

同样的问题。即使它永远不应该返回 null,但在我的项目中,当我更新现有实体时,我会得到一个 null 值(静默失败)。如果我创建一个新实体,它就可以工作。我也尝试实现 Persistable 接口,但仍然是同样的问题。我正在使用 Spring Data + R2DBC + Java 15。

于 2021-03-11T03:48:35.657 回答
0

根据实现,它总是会返回一个值或抛出一个异常。

更新实现是针对1.11.18.RELEASE. 来自 GitHub 存储库

@Transactional
public <S extends T> S save(S entity) {
    if (this.entityInformation.isNew(entity)) {
        this.em.persist(entity);
        return entity;
    } else {
        return this.em.merge(entity);
    }
}
于 2020-04-04T13:53:28.490 回答