Hibernate: @GeneratedValue (стратегии = GenerationType - PullRequest
0 голосов
/ 12 октября 2011

Я использую DB2 для своего приложения.Я запускаю скрипт вставки после создания базы данных.Этот скрипт вставки генерирует записи в таблице с идентификаторами, указанными в скрипте вставки.

Предположим, что для скрипта вставки таблиц abc создается запись с идентификатором = 3. Поскольку для идентификаторов задано автоматическое создание в hibernate, то при сохранении третьей записи из приложенияЯ получил исключение.

        Caused by: com.ibm.websphere.ce.cm.DuplicateKeyException: One or
 more values in the INSERT statement, UPDATE statement, or foreign
 key update caused by a DELETE statement are not valid
 because the primary key, unique constraint or unique
 index identified by "1" constrains table

Я использую @GeneratedValue(strategy = GenerationType.AUTO)

Что strategy = GenerationType Я должен использовать для решения этой проблемы.

Ответы [ 4 ]

1 голос
/ 13 октября 2011

При использовании GenerationType.IDENTITY возникают проблемы с определенными базами данных и Hibernate. Попробуйте использовать последовательность и явно настроить для нее все:

@Id
@SequenceGenerator(name = "DEPARTMENT_ID_GENERATOR", sequenceName="department_sequence", allocationSize=100)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "DEPARTMENT_ID_GENERATOR")
@Column(unique = true, nullable = false)
protected Long id;
0 голосов
/ 21 октября 2011

Ничего не работает, кроме этого запроса.

alter table TABLE_NAME alter column ID set GENERATED BY DEFAULT RESTART WITH 10000;

DB2 должна сама выбирать доступный ID, но не делать этого.

0 голосов
/ 13 октября 2011

Если в файле указаны идентификаторы, тогда вам вообще не нужно @GeneratedValue, так как для генерации идентификатора нет.И обязательно очистите базу данных, как предложено @SjB.

Также, не зная ничего о DB2, в сообщении об ошибке указывается, что может быть другое нарушение, чем просто дублирование идентификатора при вставке.Есть ли какие-либо внешние ключи?

0 голосов
/ 12 октября 2011

Для DB2 @GeneratedValue(strategy = GenerationType.IDENTITY) должно работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...