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