如何在hibernate中将默认值设置为关系

时间:2011-09-19 05:38:16

标签: hibernate spring

您好我正在使用MYSQL和Hibernate并且有一个表Customer的列Customer_type,默认值为1,其外键在Customer中但在CustomerType表中的主键找到以下代码在我的Customer hbm文件中,我编写了以下代码:

<many-to-one name="customerType" class="CustomerType" lazy="false">
    <column name="customer_type_id" not-null="true"/>
</many-to-one> 

但是列不是null并且在我的表中它的默认值是1.而我在保存Customer对象时没有设置此对象因为默认值在表中但是得到异常propertyviolationexception not null引用null值我怎么能遇到这个问题以及如何在hibernate中将默认值设置为关系

2 个答案:

答案 0 :(得分:0)

As per SQL default value will be set when you omit the column in insert script.

它与Hibernate的工作方式相同,最终通过在HBM中按照映射包含列来执行插入脚本。一种方法是使用您的默认值为CustomerType创建一个对象。如果未通过任何业务逻辑设置父对象,则在保存父对象时将其设置为父对象。所以,这可以毫无例外地得到保存。

其他简单方法是在多对一映射集insert='false'中,并为列customer_type_id映射基本类型字段,并将值设置为1。因此,当检索到关系时,这个将被保存到DB的默认值列中。

答案 1 :(得分:0)

您强制您的字段customer_type_id 非空,因此hibernate会使用其最低值初始化该值。如果您想使用默认值预设您的ID,请在hibernate映射中使用以下代码,用于类CustomerType

<propery name="customerTypeId" type="long" column="customer_type_id">
    <column=" name="customer_type_id" not-null="true" default="1000"/>
</property>