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

从版本11升级到ColdFusion 2018后的ORM问题,orm,coldfusion,coldfusion-2018,Orm,Coldfusion,Coldfusion 2018,我们从ColdFusion 11迁移到ColdFusion 2018,现在ORM正在破坏EntitySave方法,我们得到下面的错误消息 错误消息-此异常的根本原因是:coldfusion.orm.hibernate.HibernateSessionException:批更新从更新[0]返回意外的行计数;实际行数:0;预期:1 我们有两个具有一对多关系的类,如Email.cfc(父类)和EmailItems.cfc(子类)。当我们尝试保存Email.cfc对象时,hibernate也会为Emai

我们从ColdFusion 11迁移到ColdFusion 2018,现在ORM正在破坏
EntitySave
方法,我们得到下面的错误消息

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

我们有两个具有一对多关系的类,如Email.cfc(父类)和EmailItems.cfc(子类)。当我们尝试保存Email.cfc对象时,hibernate也会为
EmailItems
创建一个更新查询,这仅适用于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"
/>


我们正在使用inverse,它仍然为子类“EmailItems”创建更新查询,这是失败的原因
EntitySave(Email)
。ColdFusion 11一切正常。

最后,我找到了解决方案。似乎
inverse=“true”
属性在cf2018中的作用与在CF2011中的不同

在做了一些研究后发现,默认情况下,
标记中为一对多关系添加了一个cascade属性,该关系的值为UPDATE,这意味着对于它试图更新的任何孤立子对象,该对象在数据库级别不存在


因此,当在我的
标记中为on-to-many关系添加
cascade=“save-update”
时,它修复了问题,因为现在它尝试插入而不是更新任何孤立子对象。

想到两件事。1.它在没有外键2的情况下工作吗。我想知道Hibernate是否有需要刷新的缓存。感谢您的响应。这不是由于hibernate缓存,因为我的调用在CFTRANSACTION标记内。下面是代码-事务{arguments.email.setIsPersisted(true);EntitySave(arguments.email);}很高兴您发现了这个问题。感谢您回来发布您的解决方案。