Поле автоматического увеличения Hibernate для нескольких баз данных - PullRequest
5 голосов
/ 22 июня 2010

У меня есть объект Java с полем, которое необходимо автоматически увеличить в базе данных. Это поле не является первичным ключом, это просто поле, которое необходимо автоматически увеличить.

Мой вопрос заключается в том, какое значение мне нужно установить в этом поле в моем Java-объекте перед выполнением session.save (Object)? Должен ли я установить его в NULL?

Как будет выглядеть отображение Hibernate для этого поля? Это то, что у меня есть, но оно не работает:

<property name="reportNum" type="java.lang.Long">
 <column name="REPORTNUM"/>
 <generator class="increment"/>
</property>

Кроме того, приложение должно поддерживать как MySQL, так и SQL Server.

спасибо заранее.

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Я бы постарался сохранить его как можно более простым и просто пометить свойство атрибутами insert = false, update = false . У меня возникли проблемы перед использованием аннотации @Generated с именованными запросами, но insert / update = false всегда работал так, как рекламировалось.

0 голосов
/ 23 июня 2010

Вы не можете использовать <generator> для не id поля.Я могу подумать о двух возможных решениях здесь:

Вариант 1

Имейте свойство, сгенерированное базой данных (используя столбец автоинкремента 1 или триггер) исопоставить его как сгенерированное свойство (см. 5.6. Сгенерированные свойства ):

<property name="reportNum" type="java.lang.Long" generated="insert">
  <column name="REPORTNUM"/>
</property>

Это говорит Hibernate, что данное значение свойства генерируется при вставке (и Hibernate будет читать его после вставки воценить сущность).

Опция 2

Создать сущность только с атрибутом ID.Когда вам нужно новое значение, вы просто создаете новый экземпляр и сохраняете его в базе данных.Затем вы устанавливаете сгенерированный идентификатор в вашей сущности.

1 ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не проверял, возможно ли это для столбца, отличного от pk.

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