首页 > 解决方案 > 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 足够了吗?我需要避免重复用户

标签: javaspringtransactionsspring-data-jpaspring-transactions

解决方案


推荐阅读