从版本11升级到ColdFusion 2018后的ORM问题

时间:2019-01-02 15:56:11

标签: orm coldfusion coldfusion-2018

我们从ColdFusion 11迁移到ColdFusion 2018,现在ORM打破了EntitySave方法,并且得到了以下错误消息。

  错误消息-此异常的根本原因是:coldfusion.orm.hibernate.HibernateSessionException:批处理更新从更新[0]返回意外行数;实际行数:0;预期:1。

我们有2个具有一对多关系的类,例如Email.cfc(父级)和EmailItems.cfc(子级)。当我们尝试保存Email.cfc对象时,休眠也会为EmailItems创建一个UPDATE查询,而这仅在ColdFusion 2018中发生。

这是Email.cfc中定义的属性。

<cfproperty name="EmailItems" 
            lazy="true" 
            fieldtype="one-to-many" 
            inverse="true" 
            fkcolumn="EmailID" 
            cfc="EmailItem" 
            singularName="EmailItem" 
            type="struct" 
            structkeycolumn="EmailItemKey" 
            structkeytype="string" 
            cascade="none"
/>

我们正在使用逆函数,它仍然为子类'EmailItems'创建UPDATE查询,这是失败EntitySave(Email)的原因。 ColdFusion 11一切正常。

1 个答案:

答案 0 :(得分:2)

最后,我找到了解决办法。似乎inverse="true"属性对cf2018的作用与与CF2011的作用不同。

经过一些研究后发现,默认情况下,<cfproperty>标记中为一对多关系添加了层叠属性,其值为UPDATE,这意味着对于任何孤立的子对象,它尝试在该对象进行更新时在数据库级别不存在。

因此,当在我的cascade="save-update"标记中添加<cfproperty>进行多对多关系时,它可以解决此问题,因为现在它尝试为任何孤立的子对象插入而不是UPDATE。