2016-03-10 2 views
0

Я использую аннотации JPA (реализация спящего режима), и я хочу изменить идентификатор объекта, объединив его. Существует ли какая-либо аннотация или решение, чтобы избежать дублирования, а затем удалить объект?Обновление идентификатора экземпляра в JPA

+1

Вы не можете изменить идентификатор объекта после его сохранения –

ответ

2

Это не возможно с помощью JPA, по уважительным причинам:

  • у вас есть объект удаляется из контекста настойчивости и вы хотите приклеить ее, как, возможно, это может быть связанно с исходной строкой она была модифицирована если вы удалите единственный способ сделать соединение? Итак, давайте предположим, что мы храним исходный идентификатор и пытаемся перейти оттуда, но теперь, поскольку id модифицируется, существует 0 гарантия того, что он не был изменен каким-либо другим процессом, пока он был отсоединен, что делает наш сохраненный исходный идентификатор бесполезным и вызывая полный хаос.

Вы можете сделать обходные пути, хотя:

  • использовать нативный запрос для изменения полосы землеотвода
  • не использовать этот столбец в качестве первичного ключа, но вместо того, чтобы создать новый с сгенерированными последовательностями
  • дублировать, то удалить объект, как вы сказали, также полностью действителен и безопасен, так как он находится в одной и той же транзакции
0

Вы можете изменить идентификатор объекта в jpa с использованием JPQL, например, в этом примере:

public void updateUsername(User userToUpdate,String newUserName) { 
EntityManager manager=ConnectionDao.getConnecting(); 
User user=find(userToUpdate.getUsername()); 
manager.getTransaction().begin(); 
manager.createQuery("update User u set u.username=\'"+newUserName+"\'").executeUpdate(); 
manager.getTransaction().commit(); 
return; 
} 
Смежные вопросы