Spring JPA - реализовать уникальные ограничения в коде - уровень изоляции Tx - PullRequest
0 голосов
/ 20 октября 2018

Мне нужно реализовать уникальную проверку ограничений с использованием jpa данных Spring, и я знаю, что это можно сделать с помощью аннотаций 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?Мне нужно, чтобы избежать дублирования пользователей

...