2013-09-06 9 views
0

Я хотел бы знать, в какое время точно Id объекта устанавливается на следующее значение последовательности, объявленной в (oracle) базе данных., когда установлен идентификатор (GenerationType.SEQUENCE) в объекте?

Вот код:

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SEQ_A") 
@SequenceGenerator(name="SEQ_A", sequenceName = "SEQ_A_ID") 

Спасибо.

+1

Возможный дубликат [Когда JPA установлен @GeneratedValue @Id] (http://stackoverflow.com/questions/9087848/when-does-the-jpa-set-a-generatedvalue-id) – awb

ответ

0

При выполнении последовательности JPA устанавливает идентификатор точно после вызова метода persist вашего экземпляра EntityManager. Нет необходимости совершать флеш. Идентификатор доступен именно после этого вызова.
Это основное отличие между GenerationType.SEQUENCE и .IDENTITY. Более поздний из них предлагает идентификатор после контакта с db, в то время как SEQUENCE устанавливает его напрямую, потому что группа идентификаторов предварительно загружена в приложении во время выполнения, поэтому нет необходимости взаимодействовать с db для получения идентификатора.

Объяснение протокола JPA по другому осуществлению:.
«В отличии от AUTO и IDENTITY, стратегия ПОСЛЕДОВАТЕЛЬНОСТИ генерирует автоматическое значение, как только новый объект объекта сохраняется (т.е. до фиксации) Это может быть полезно, когда первичным ключевое значение требуется раньше. Чтобы свести к минимуму круглые поездки на сервер базы данных, идентификаторы выделяются группами. Количество идентификаторов в каждом распределении определяется атрибутом allocSize. Возможно, некоторые идентификаторы в заданном распределении не будут поэтому эта стратегия не гарантирует, что в значениях последовательности не будет пробелов ». http://www.objectdb.com/java/jpa/entity/generated

 Смежные вопросы

  • Нет связанных вопросов^_^