Spring Data(或 JPA)-如何更新实体但如果不存在则不插入

问题描述 投票:0回答:1

我有一种情况,我需要能够更新一个实体,但如果它不存在则能够抛出异常。

我能想到的最好的:

if (!authorRepository.existsById(1L)) {
    throw new Exception("entity doesn't exist yet!");
} else {
    authorRepository.save(entity);
}

还有其他方法吗? JPA 似乎并没有提供一种只进行更新的方法,EntityManager.merge() 的行为类似于创建或更新。

hibernate jpa spring-data-jpa spring-data
1个回答
-1
投票

在 Spring Boot 和 Hibernate 中,save 方法会自动判断实体 ID 是否已经存在。如果是,该方法更新现有实体;否则,它将向数据库中插入一个新的。对于您的解决方案,我建议您在尝试更新实体之前编写自定义查询或检查 ID,正如您在问题中提到的那样。在这种情况下我更喜欢使用可选类型:

抛出异常:

authorRepository.findById(1L)
    .orElseThrow(() -> new Exception("Entity doesn't exist yet!"));
authorRepository.save(entity);

还有另一种方式更新它的存在:

authorRepository.findById(1L)
    .orElseThrow(() -> authorRepository.save(entity));
© www.soinside.com 2019 - 2024. All rights reserved.