Я принял ответ от @ antoine.lange, потому что это, по сути, то, что я искал.
class User {
@ManyToMany
@Size(min=1, max=1)
List<RoleA> aRoles;
}
Я проверил это, и оно работает точно так, как ожидалось для вставок. Однако для обновления Hibernate не вызывает BeanValidationListener на случай, если вы измените только коллекцию. Вы также должны изменить некоторые атрибуты basi c в качестве обходного пути. Я буду следить за этим в Hibernate Jira: HHH-13898 .
Эта последовательность не запускает проверку:
existingUser.getARoles().add(role1);
existingUser.getARoles().add(role2);
userRepository.saveAndFlush(existingUser);
Эта последовательность действий (и выбрасывает ConstraintViolationException ):
user.setName(newName);
existingUser.getARoles().add(role1);
existingUser.getARoles().add(role2);
userRepository.saveAndFlush(existingUser);