Spring JPA-在代码中实现唯一约束-Tx隔离级别

时间:2018-10-20 00:12:13

标签: java spring transactions spring-data-jpa spring-transactions

我需要使用spring数据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是否足够?我需要避免重复的用户

0 个答案:

没有答案