Hibernate, назначение нескольких столбцов в качестве первичного ключа - PullRequest
3 голосов
/ 23 июля 2010

У меня ниже схемы базы данных.

Table:items
item_id int(11) autoincrement not null
item_name varchar(22) not null
version_start_date datetime not null
version_end_date datetime

Первичный ключ для приведенной выше таблицы (item_id, version_start_date). Семантика версий version_start_date и version_end_date заключается в отслеживании любых изменений в строке таблицы. Например, если имя элемента изменено, добавляется новая строка и обновляется старая строка version_end_date.

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

Я заблокирован на этом шаге :( Любая помощь будет оценена.

Спасибо Bala

-- Updated

Итак, наконец, я думаю о подходе ниже. Я не хочу использовать естественный идентификатор, потому что мне нужно создать идентификатор. Вместо этого я думаю о том, чтобы поле item_version_id также было в таблице.

Итак, новая схема будет ...

Table:items
item_version_id autoincrement not null
item_id int(11) autoincrement not null
item_name varchar(22) not null
version_start_date datetime not null
version_end_date datetime
primary key(item_version_id)
unique key(item_id,version_start_date)

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

Только элемент ID может иметь генератор. Но в этом случае у меня есть два генератора. Есть ли обходной путь для этого.

Спасибо
Bala

1 Ответ

3 голосов
/ 23 июля 2010

Вам нужен пользовательский тип гибернации в сочетании с генератором пользовательских идентификаторов.Я не думаю, что есть способ обойти это.

это должно начать вас. Генератор идентификаторов Hibernate

edit-- Я настоятельно рекомендую использовать суррогатные ключи, как рекомендовано в документации по Hibernate.Если вы не рискуете сделать вещи на лот сложнее, чем они должны быть.

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

отредактируйте для своего обновления -

Очевидно, это возможно сейчас (не было, когда мы должны были решить эту проблему)

http://opensource.atlassian.com/projects/hibernate/browse/HHH-2060

Теперь вы можете указать любой генератор для части составного ключа.это довольно мило.

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

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