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

时间:2012-01-07 11:27:02

标签: 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>

2 个答案:

答案 0 :(得分:14)

this精彩文章中解释:

  

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”:

enter image description here

答案 1 :(得分:5)

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

  

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

在您的示例中,unsaved-value="null"似乎毫无意义,因为我怀疑Long的“合理默认”是null

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