Я пытаюсь удалить объект, который имеет уникальный ПК, например: 80253
Я удаляю эту сущность, выполняя следующие строки кода:
myEntityType1 = getEntityManager().find(MyEntityType1.class, 80253);
getEntityManager().remove(myEntityType1);
getEntityManager().flush();
Эти биты кода действительно удаляют строки из моей базы данных и всех ее каскадных объектов должным образом, и я очень рад этому. Теперь проблема возникает, когда мне нужно создать похожую сущность, которая использует тот же первичный ключ (который теперь должен быть в порядке?).
MyEntityType2 myEntityType2 = new MyEntityType2 ();
myEntityType2.copyData(myEntityType1); //access the data from the other object
//and retrieves the id 80253. myEntityType2 now has 80253 as ID.
getEntitymanager().persist(myEntityType2);
Теперь я получаю уникальную ошибку SQL ограничения. Я пытаюсь вставить идентификатор, который уже существует, и изменения автоматически откатываются (старая сущность больше не удаляется). Это происходит после того, как я вижу в своем логгере, что toplink удалил записи старого объекта.
Кто-нибудь знает, как это происходит, и почему это не работает? Для записи я попытался объединить, закрыть, очистить entityManager, но, похоже, ничего не работает.
Мне кажется, что JPA может плохо кэшировать или что-то в этом роде. Надеюсь, у меня есть хороший ответ для меня! =)
Обновление: Theres больше не проблема с ограничениями уникального идентификатора, но я создаю новый подкласс с тем же первичным ключом, который был удален, я получаю следующее исключение:
Exception Description: Trying to invoke [setApprovedWhen] on the object [null]. The
number of actual and formal parameters differs, or an unwrapping conversion has failed.
Internal Exception: java.lang.IllegalArgumentException: object is not an instance of
declaring class
Мне кажется, что это не позволит мне изменить объект на другой подкласс?