java - Spring JPA - 在代码中实现唯一约束 - Tx 隔离级别
问题描述
我需要使用 spring data jpa 来实现唯一的约束验证,我知道它可以用 jpa 注释来完成,但我需要手动完成。
我有一个这样的类(实体)用户:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
private Date createdAt;
}
当我创建一个新用户时,我必须验证不存在具有相同用户名或密码的其他用户。我知道我需要做这样的事情(或多或少):
public interface UserRepository extends JpaRepository<User, Long> {
public List<User> findByUsernameOrEmail(String username, String email);
}
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public User create(User user) {
List<User> users = this.userRepository.findByUsernameOrEmail(user.getUsername(), user.getEmail());
if (users.size() > 0)
throw new RuntimeException("No repeated username or email allowed");
User newUser = this.userRepository.save(user);
return newUser;
}
}
我的问题是:我应该使用什么类型的事务隔离级别?REPETEABLE_READ 足够了吗?我需要避免重复用户