hibernate中对unsaved-value属性的需求是什么?

sur*_*esh 17 hibernate

unsaved-value属性需要什么?

<id name="userid" column="userid" type="java.lang.Long" unsaved-value="null">   
  <generator class="sequence">
    <param name="sequence">dmuseridseq</param>
  </generator> 
</id>
Run Code Online (Sandbox Code Playgroud)

jhe*_*dus 14

这篇精彩的文章解释了这一点:

Hibernate映射文件指示Person上的id字段是数据库ID(即它是PERSON表中的主键).在id标记内是一个属性unsaved-value ="null",它告诉Hibernate使用id字段来确定是否先前保存了Person对象.ORM框架必须进行区分,以了解它们是否应该使用SQL INSERT或UPDATE语句保存对象.在这种情况下,Hibernate假定id字段在新对象上开始为null,并在首次保存时分配.

另外,您可以在"Java Persistence with Hibernate"一书中阅读"unsaved-value":

在此输入图像描述


ska*_*man 5

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

unsaved-value(可选 - 默认为"敏感"值):标识符属性值,指示实例是新实例化的(未保存),将其与在先前会话中保存或加载的分离实例区分开来.

在你的榜样,unsaved-value="null"似乎很没有意义的,因为我怀疑的"合理的默认"为LongIS null.

它对于原始类型(例如int)更有用,它不可能null,并且0在某些应用程序中可能不需要默认的未保存值(0是一个完全有效的数值).