Так работает Hibernate по умолчанию. Он назначает автоматически сгенерированный идентификатор, когда вы сохраняете метод, и идентификатор не установлен. Если есть идентификатор, он пытается обновить его (что происходит в вашем случае).
save Сохраняет сущность. Назначит идентификатор, если он не
существовать. Если кто-то делает, это по сути делает обновление. Возвращает
сгенерированный идентификатор сущности.
Вы можете сделать обходной путь, например, используя persist и @ PrePersist
@PrePersist
void generateId() {
if (uniq_name == null) {
uniq_name = GENERATE_SOME_UNIQUE_ID_SO_IT_DOESN'T_BREAK();
}
}
А затем используйте xptoVersionMapRepository.persist (xptoVersionMap);
Или вы можете написать свой собственный генератор с чем-то вроде этого:
@GenericGenerator(name = "my_generator", strategy = "package.CustomGenerator")
@GeneratedValue(generator = "my_generator")
А затем создайте класс CustomGenerator, который реализует IdentifierGenerator, и создайте необходимые методы.