2
org.hibernate.PropertyValueException: not-null property references a 
null or transient value

我正在使用 Java、Hibernate 和 MySQL 5.1.52-log 版本。

我对默认值的解释是,如果我不为列提供值,当我尝试保存此对象时,Hibernate 将插入默认值。

HBM 文件,

<property name="isActive" type="java.lang.Short">
        <column name="IsActive" not-null="true" default="1"/>
</property>
4

2 回答 2

1

根据 PropertyValueException 的文档,如果您在声明为 not-null="true" 的属性中设置一个空值,然后尝试对其进行持久化/更新,那么您将收到此异常。

http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/PropertyValueException.html

您应该从配置中删除 not-null="true" 属性(因为 not-null 的默认值为 false),然后数据库应插入您在配置中为您指定的默认值(在本例中为 '1 ')。

[更新]

我更愿意将此作为 fujy 答案中的评论,但我还不允许评论其他答案。如果您删除“非空”属性(如下所示),它是否按预期工作?我相信这就是导致您遇到异常的原因。

 <property name="isActive" type="java.lang.Short">
     <meta attribute="default-value">1</meta>
     <column name="IsActive" />
 </property>
于 2013-09-04T23:59:30.960 回答
0

你可以直接在你的模型上设置它

 private Short isActive = 1;

或者你可以在你的hbm文件中试试这个

 <property name="isActive" type="java.lang.Short">
     <meta attribute="default-value">1</meta>
     <column name="IsActive" not-null="true"/>
 </property>
于 2013-09-04T23:51:48.603 回答