Генерация идентификаторов для использования с «назначенным» генератором Hibernate - PullRequest
0 голосов
/ 26 ноября 2011

Мы сообщаем Hibernate , как генерировать идентификаторы, используя тег <generator>.Например:

<generator class="sequence">
    <param name="sequence">person_id_sequence</param>
</generator>

Я хочу использовать <generator class="assigned">.Согласно документации:

assigned

позволяет приложению присвоить идентификатор объекту перед вызовом save ().

Есть лиспособ также настроить генератор sequence, который я могу использовать для генерации идентификаторов, которые я назначу моим объектам?

Это примерно то, что я хочу сделать:

Session session = ...;

// This will use the "sequence" generator:
Integer id = session.fictionalMethodThatGeneratesIdentifiers(Person.class);

Person person = new Person();
person.setId(id);
person.setName("Adam");

// This will use the "assigned" generator:
session.save(person);

1 Ответ

1 голос
/ 27 ноября 2011

Да (см. Ниже), но очевидный вопрос - «почему»?Это большая работа, чтобы получить тот же результат.

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

Если вы сделаете это, обратите внимание, что в документации сказано:

Назначенный генератор заставляет Hibernate использовать unsaved-value = "undefined".Это вынуждает Hibernate перейти в базу данных, чтобы определить, является ли экземпляр временным или отключенным, если нет свойства версии или метки времени или вы не определите Interceptor.isUnsaved ().

Итак, я быпредложите явно сопоставить unsaved-value, скажем, с -1, и заставить ваш объект инициализировать значение id для этого, в противном случае вы будете видеть много дополнительных затрат каждый раз, когда пытаетесь сохранить экземпляр.

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