MySQL / Hibernate:非空列的默认值不起作用

时间:2013-09-04 22:09:14

标签: java mysql hibernate

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>

2 个答案:

答案 0 :(得分:1)

根据PropertyValueException的文档,如果在声明为not-null =“true”的属性中设置null值,然后尝试持久化/更新它,那么您将获得此异常。

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

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

<强> [UPDATE]

我更愿意将此作为评论在fujy的回答中,但我还不允许对其他答案发表评论。如果删除'not-null'属性(如下所示),它是否按预期工作?我相信这就是导致您获得例外的原因。

 <property name="isActive" type="java.lang.Short">
     <meta attribute="default-value">1</meta>
     <column name="IsActive" />
 </property>

答案 1 :(得分: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>