2015-12-11 5 views
0

Я сделал класс сущности и добавил аннотацию @id и @GeneratedValue в поле ID. При сохранении объекта я задавался вопросом, что он автоматически установит значение в поле ID, но когда зафиксировать данные в db, я получил исключение последовательности. Затем я установил идентификатор и сохраняю его успешно.Исключение, пока сохраняется объект JPA

Я побежал мой код еще раз и попытаться сохраняться данные с теми же значениями, и я получил исключение связано с дублированием ..

Я искал и изменить @GeneratedValue аннотацию со следующим:

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

и данные сохраняются успешно, не устанавливая значение идентификатора вручную.

Так что мой вопрос в том, что такое различие между @GeneratedValue и @SequenceGenerator, не эти две аннотации, используемые для этой же цели? и как мы можем использовать стратегию в атрибуте?

Пожалуйста, руководство me.Help будет оценено Спасибо

ответ

0

я нашел this может помочь вам. Из Javadoc для SequenceGenerator

Определяет первичный генератор ключей, который может ссылаться по имени, когда элемент генератора задается для аннотирования GeneratedValue. Генератор последовательности может быть указан в классе сущности или в поле или свойства первичного ключа. Объем имени генератора является глобальным для единицы сохранения (для всех типов генераторов).

0

Я постараюсь скрыть ваши 2 вопроса одним выстрелом.

@SequenceGenerator используется для точки в последовательности, созданной в БД с помощью свойства «sequenceName», а затем вы даете ему имя с помощью свойства «name». Пример:

@SequenceGenerator(name="myIdSeq", sequenceName="MY_ID_SEQ", allocationSize=1, initialValue=1) 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="myIdSeq") 

Одно примечание: name может использоваться совместно с вашей единицей непрерывности.




@GeneratedValue определяет, какую стратегию вы хотите идентификатор генерируется, как правило, мы имеем stategies как

1. IDENTITY (AUTO) который будет автоматически инкремента и пользуется популярностью в MySQL

2. SEQUENCE, который указывает на последовательность Gernerator и это тот, который вы используете выше. Обратите внимание, что значение generator должно соответствовать значению name в @SequenceGenerator

3. TABLE которая использует выделенную таблицу для магазинов имени последовательности с колонкой для текущих номеров и подходят для приложений уровня предприятия.

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