从版本11升级到ColdFusion 2018后的ORM问题
我们从ColdFusion 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
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);}很高兴您发现了这个问题。感谢您回来发布您的解决方案。