2016-02-09 2 views
1

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

детали, как показано ниже, технологии: Groovy и Grails 1, Hibernate 3. Конфигурация: myclass.hbm.xml, я изменил идентификатор из

<id name="id" type="long" column="MY_ID" unsaved-value="null"> 
    <generator class="sequence"> 
    <param name="sequence">my_id_seq</param> 
    </generator> 
</id> 

в

<id name="id" type="long" column="MY_ID" unsaved-value="null"> 
    <generator class="assigned"> 
    </generator> 
</id> 

В классе модели MyClass.groovy я явно определяю id как свойство.

У меня есть show_sql true. Когда идентификатор упорядочен, и я оставляю его автогенным, я могу видеть распечатку инструкции вставки, и запись найдена в таблице. После присвоения идентификатора и назначения (нового), он всегда печатает обновление.

Надежда информация ясна и достаточно для помощи ..

+0

это может быть то, что вы ищете [Использование назначенного идентификатора для объекта домена в Grails 2.0] (http://stackoverflow.com/questions/9826509/using-assigned-id-for-domain-object-in-grails -2-0) –

+0

Также проверьте [Grails doc for id] (http://grails.github.io/grails-doc/latest/ref/Database%20Mapping/id.html) –

ответ

1

Не указывайте unsaved-value атрибутов для assigned генераторов ид.

По умолчанию unsaved-value для генератора id assigned составляет undefined, и я не рекомендую его менять. В вашем текущем определении генератора идентификаторов вы в основном указываете Hibernate, что объекты, значения null в поле id являются временными, а другие нет. Следовательно, объекты с ненулевыми идентификаторами никогда не будут считаться переходными.

0

можно использовать подобный если хотите.

<hibernate-mapping package="your-package"> 
<class name="Sequence" table="sequence"> 
<id name="id" type="long"> 
<generator class="increment"/> 

В вышеописанном случае по умолчанию будет начинаться с 1. последовательности: -для последовательность запуска от 1, но вы можете указать любое другое число, а в момент создания таблицы.

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