我们有一个现有的 ColdBox 应用程序,我们没有在其上使用 ORM,但想要启动它。
我已经从 ColdBox 站点启动并运行了 orm 示例应用程序,并更改了this.ormsettings
application.cfc 中的结构以包含我现有应用程序的数据源。然后,我创建了一个持久 cfc,并在组件的属性中为其指定了一个与 db 中的一个表匹配的表名。我注释掉了引用示例“作者”和“书籍”内容的其他代码,并使用了我的新代码,调用list()
了注入的 entityService,当我在浏览器中运行页面时,它神奇地列出了 db 表中的所有记录,所以我知道它正在工作。
然后,我将示例应用程序中的持久 cfc 文件复制到我们正在尝试大修的现有应用程序中,在其 application.cfc 中添加相同的 orm 设置(以及 this.ormenabled = true),并在顶部添加 entityService 注入元数据我的应用程序的处理程序。我重新启动了 ColdFusion,这样它就可以获取 orm 配置位并尝试访问该页面,但我收到一个错误:Could not find the ColdFusion component or interface <the name of my cfc>
.
我确定它正在查找文件并且我在 ormsettings 中的 cfclocation 路径是正确的,因为如果我将 entityService 注入元数据更改为引用虚假的东西(如“Foo”),那么我会得到一个不同的错误:'A CFC with entityname找不到Foo。所以我知道它正在查找 .cfc 文件本身。
堆栈跟踪显示错误发生在EntityNew()
调用中第 69 行的 system/orm/hibernate/util/CFORMUtil.cfc 中。由于该文件与我可以在示例应用程序中正常运行的文件相同(直接复制/粘贴),我强烈怀疑它是应用程序级别的不同之处,导致 EntityNew 调用抛出该错误。由于 EntityNew 是一个 ColdFusion 函数,我无法真正介入并查看示例应用程序和我的应用程序之间出了什么问题或有什么不同。我确实throw(message=arguments.entity)
在该行之前放了一个,并且在两个应用程序中,值都是相同的字符串(来自注入元数据的实体名称)。
我需要的是某种方式来调查正在发生的事情或追踪可能影响 ColdFusion ORM 的设置,因为它似乎处于那个级别。