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

    今天帮朋友改一个问题,hibnernate的级联保存出错,莫名奇妙的错误,一会session关闭了,一会瞬时对象无法保存,一遍又一遍的检查这mapping文件,没什么问题啊,这是单项一对多关联:
一端:
<hibernate-mapping package="com.bestv.bi.usertrack.model">
<class name = "ParameterRecord" table = "fact_parameterrecord">
  <id name="id" type="long">    
     <column name="id" precision="22" scale="0" />    
     <generator class="sequence">    
     <param name="sequence">SEQ_PARAMETERRECORD</param>    
     </generator>    
  </id>
  。。。
  <set name="paraValues"
     table="FACT_PARAVALUE"
     lazy="false"
     inverse="false" cascade="all" >
  <key column="RECORD_ID"/>
  <one-to-many class="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信息的,而这个字段恰好有not null约束,所以导致错误。

猜你喜欢

转载自songzi0206.iteye.com/blog/1057293
今日推荐