orm - 从版本 11 升级到 ColdFusion 2018 后的 ORM 问题
问题描述
我们从 ColdFusion 11 迁移到 ColdFusion 2018,现在 ORM 正在破坏该EntitySave
方法,我们收到以下错误消息。
错误消息 - 此异常的根本原因是:coldfusion.orm.hibernate.HibernateSessionException:批量更新从更新 [0] 返回了意外的行数;实际行数:0;预期:1。
我们有 2 个具有一对多关系的类,例如 Email.cfc(父)和 EmailItems.cfc(子)。当我们尝试保存 Email.cfc 对象时,hibernate 也会创建一个 UPDATE 查询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”创建一个 UPDATE 查询,这是失败的原因EntitySave(Email)
。ColdFusion 11 一切正常。
解决方案
最后,我找到了解决这个问题的方法。似乎这些inverse="true"
属性与 cf2018 的工作方式不同,因为它与 CF2011 的工作方式不同。
在做了一些研究后发现,默认情况下,在<cfproperty>
标签中为一对多关系添加一个级联属性,其值为 UPDATE,这意味着对于它试图更新的任何孤立子对象,而该对象在数据库级别不存在。
因此,当添加cascade="save-update"
我<cfproperty>
的多对多关系标签时,它解决了问题,因为现在它尝试为任何孤立的子对象插入而不是更新。
推荐阅读
- python - 使用 Python 使用 Cluster RabbitMq 的队列
- javascript - 在 Edge IE 模式下检测浏览器
- ffmpeg - 我需要命令在指定时间覆盖视频
- python - BeautifulSoup 没有返回完整的 html - 403 Forbidden?
- elixir - Elixir Atoms 及其不同形式
- c# - Npgsql 从数据库中读取特殊字符
- django - 如何在基本 html 模板 django 中创建一个简单的表单
- python-3.x - 如何将主动自适应卡发送到 MS Teams 频道
- java - 如何在 Java 中每 X 分钟销毁一次广告?
- pgadmin - pgadmin 4 v5 启动问题