2015-11-05 2 views
0

Предположим, что у меня есть объект A с идентификатором 1 на мой сохранение слоя (т.е. на БД)разъяснение на поведение слияния

Если я следующий

A a = new A(); 
a.setId(1); 
a.setSomeField("a value"); 
A managed_a = entityManager.merge(a); 

бы менеджер субъект получить сохраненное объект с идентификатором 1 в БД, сделать его управляемым и обновить его соответствующим образом?

Или объект с идентификатором 1 должен exsist в контексте персистентности для того, чтобы это произошло?

ответ

0

семантику операции объединения применено к объекту Х являются такими, как следующим образом:

  • Если X представляет собой отдельные лица, состояние X копируется на ранее существовавший управляемый экземпляр объекта X 'того же идентификатора или новой управляемой копии X' из X.
  • Если X является новым экземпляром сущности, создается новый экземпляр управляемой сущности X ', а состояние X копируется в новый экземпляр управляемой сущности X'.

На первой точке: Если объект А с идентификатором 1 уже существует в таблице базы данных, то это означает, что объект А является ОТДЕЛИЛИ сущность. В этом случае поля объекта A будут объединены с данными в вашей таблице, таким образом вы увидите это как операцию UPDATE.

Во второй точке: Если ваша сущность A с идентификатором 1 не существует в вашей таблице базы данных, то объект A считается NEW объект. Таким образом, это будет операция INSERT.

Оба сценария приводят к управляемому объекту, возвращенному из операции слияния.

+0

ОК, большое спасибо;) – GionJh