Зачем нужен атрибут несохраненного значения в спящем режиме? - PullRequest
17 голосов
/ 07 января 2012

Зачем нужен атрибут unsaved-value?

<id name="userid" column="userid" type="java.lang.Long" unsaved-value="null">   
  <generator class="sequence">
    <param name="sequence">dmuseridseq</param>
  </generator> 
</id>

Ответы [ 2 ]

14 голосов
/ 07 февраля 2014

Это объясняется в этой блестящей статье:

Файл отображения Hibernate указывает, что поле id для Person является идентификатором базы данных (т.е. это первичный ключ вЧЕЛОВЕК стол).В теге id есть атрибут unsaved-value = "null", который указывает Hibernate использовать поле id для определения, был ли ранее сохранен объект Person или нет.Платформы ORM должны делать это различие, чтобы знать, должны ли они сохранять объект с помощью оператора SQL INSERT или UPDATE.В этом случае Hibernate предполагает, что поле id начинается с нуля для новых объектов и присваивается при их первом сохранении.

Также вы можете прочитать о "unsaved-value" в книге "JavaПерсистенция с Hibernate ":

enter image description here

5 голосов
/ 07 января 2012

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html

unsaved-value (необязательно - по умолчанию «разумное» значение): значение свойства идентификатора, которое указывает, что экземпляр был недавно создан (несохранен), отличая его от отдельных экземпляровкоторые были сохранены или загружены в предыдущем сеансе.

В вашем примере unsaved-value="null" кажется довольно бессмысленным, так как я подозреваю, что "разумное значение по умолчанию" для Long равно null.

Это более полезно для примитивных типов (например, int), которые не могут быть null, а несохраненное значение по умолчанию 0 может быть нежелательным в некоторых приложениях (0 является совершенно допустимым числовым значением).

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