竟然是这个原因导致Hibernate级联保存出错

今天帮朋友改一个问题,hibnernate的级联保存出错,莫名奇妙的错误,一会session关闭了,一会瞬时对象无法保存,一遍又一遍的检查这mapping文件,没什么问题啊,这是单项一对多关联:

一端:

<hibernate-mappingpackage="com.bestv.bi.usertrack.model">

<classname="ParameterRecord"table="fact_parameterrecord">

<idname="id"type="long">

<columnname="id"precision="22"scale="0"/>

<generatorclass="sequence">

<paramname="sequence">SEQ_PARAMETERRECORD</param>

</generator>

</id>

。。。

<setname="paraValues"

table="FACT_PARAVALUE"

lazy="false"

inverse="false"cascade="all">

<keycolumn="RECORD_ID"/>

<one-to-manyclass="ParaValue"/>

</set>

</class>

</hibernate-mapping>

多端不做配置

感觉没什么错啊。

再加上flex前台通过blazeds访问后台,一开始都没有打出报错信息,以为是事务没有配置好,改来改去都不对。后来打出faultevent信息,才发现定位到hibnerate数据库保存出错。可是想来想去也不知为什么。后来才发现tmd他的FACT_PARAVALUE表中的RECORD_ID有个不能为空的约束导致的这个问题。

原因是,当hibernate保存ParameterRecord对象的时候,是先保存fact_parameterrecord表的记录和FACT_PARAVALUE表的记录,然后再去updateFACT_PARAVALUE表中RECORD_ID字段。也就是说,在保存FACT_PARAVALUE记录的时候是没有RECORD_ID信息的,而这个字段恰好有notnull约束,所以导致错误。

相关推荐