在spring boot,spring data和ms sql中, 如果用户包含已包含在数据库中的唯一字段中的值,我该如何处理用户的插入?
如果可以插入用户,是否有类似检查的内容?
现在,我有以下代码:
用户存储库:
public interface UserRepository extends CrudRepository<User, Long> {
public boolean existsByName(String name);
}
用户服务:
public void registerNewUser(RegisterUserDto toRegisterDto) throws UserAlreadyExistsException {
//check ALL unique fields ?
if(userRepository.existsByName(toRegisterDto.getName())) {
throw new UserAlreadyExistsException();
}
User entity = convertToEntity(toRegisterDto);
User saved = userRepository.save(entity);
}
所以,我的问题:
1)如果用户可以插入,可以检查如何以最简单的方式遵循所有数据库约束 - 例如唯一值?
2)如果弹出数据在插入重复用户时抛出异常,如何正确处理?
答案 0 :(得分:1)
如果您不想更新已存在的数据,则代码是最佳代码。这里是更简单的代码。
首先插入,然后DBMS引发ConstraintViolationException等。抓住异常并处理它。
try {
User saved = userRepository.save(entity);
} catch (ConstraintViolationException e) { // detailed Exception is different by DBMS and JPA implemetation
throw new UserAlreadyExistsException();
}