Добрый день!
Я столкнулся со следующей проблемой: в моем интерфейсе есть кнопка “Копировать”, реализована она у меня следующим образом:
public void execute() {
BaseUuidEntity entity = (BaseUuidEntity) metadata.getTools().deepCopy(target.getSingleSelected());
entity.setId(UUID.randomUUID());
screenBuilders.editor(target)
.newEntity(entity)
.build()
.show();
}
Как можете заметить, для копирования сущности я использую метод deepCopy(), но он у меня не всегда работает правильно. Например, у меня есть две записи: Основной и Виртуальный склад. И при копировании Основного склада возникает ошибка на уровне БД: ОШИБКА: значение NULL в столбце “key_” отношения “am_location” нарушает ограничение NOT NULL. Я продебажил и кажется понимаю в чем проблема: у атрибута refLocation в графе key присваивается значение null. А в таблице Location у меня на KEY стоит ограничение not null. И видимо поэтому копируемая сущность не сохраняется.
Я попробовал вместо метода deepCopy() использовать метод copy(), но начал получать IllegalStateException с unfetched атрибутами. Видимо мне метод copy() не подходит, т.к. у многих сущностей у меня есть вложенные коллекции и все-таки больше подходит метод deepCopy, но и он не работает так, как нужно.
Я так понимаю, мне нужна собственная реализация метода копирования?