Какая потребность в атрибуте unsaved-value в спящем режиме?
Какая потребность в атрибуте unsaved-value
?
<id name="userid" column="userid" type="java.lang.Long" unsaved-value="null">
<generator class="sequence">
<param name="sequence">dmuseridseq</param>
</generator>
</id>
Ответы
Ответ 1
Это объясняется в этой блестящей статье:
Файл отображения Hibernate указывает, что поле id для Person является идентификатором базы данных (т.е. это первичный ключ в таблице PERSON). В теге id есть атрибут unsaved-value = "null", который указывает Hibernate использовать поле id для определения, был ли ранее сохранен объект Person или нет. Платформы ORM должны делать это различие, чтобы знать, должны ли они сохранять объект с помощью оператора SQL INSERT или UPDATE. В этом случае Hibernate предполагает, что поле id начинается с нуля на новых объектах и назначается при их первом сохранении.
Также вы можете прочитать о "unsaved-value" в книге "Сохранение Java в Hibernate":
![enter image description here]()
Ответ 2
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
является абсолютно допустимым числом).