我有一种情况,我需要能够更新一个实体,但如果它不存在则能够抛出异常。
我能想到的最好的:
if (!authorRepository.existsById(1L)) {
throw new Exception("entity doesn't exist yet!");
} else {
authorRepository.save(entity);
}
还有其他方法吗? JPA 似乎并没有提供一种只进行更新的方法,EntityManager.merge() 的行为类似于创建或更新。
在 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));