Inheritance 扩展持久CFC时的NullPointerException

Inheritance 扩展持久CFC时的NullPointerException,inheritance,orm,coldfusion,nullpointerexception,cfc,Inheritance,Orm,Coldfusion,Nullpointerexception,Cfc,尝试使用County扩展单元时,特别是在重新启动应用程序以初始化ORM时,会发生此错误。[注意:我正在尝试单表继承] ORM正在管理我的数据库架构:this.ormsettings.dbcreate=dropcreate 当我从models目录中删除country.cfc时,ORM初始化,应用程序正常启动。当我将country.cfc放回models目录时,错误再次发生 ColdFusion版本10282462 MSSQL 非法移民 单位: 县: <cfcomponent persis

尝试使用County扩展单元时,特别是在重新启动应用程序以初始化ORM时,会发生此错误。[注意:我正在尝试单表继承]

ORM正在管理我的数据库架构:
this.ormsettings.dbcreate=dropcreate

当我从models目录中删除country.cfc时,ORM初始化,应用程序正常启动。当我将country.cfc放回models目录时,错误再次发生

ColdFusion版本10282462 MSSQL 非法移民

单位:


县:

<cfcomponent persistent="true" entityname="County" table="Units" extends="Unit" discriminatorValue="county">
    <cfproperty name="officeAddress" type="string">
</cfcomponent>

堆栈跟踪:

java.lang.NullPointerException at
org.hibernate.mapping.PersistentClass.createPrimaryKey(PersistentClass.java:322) at
org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:405) at
org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:321) at
org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:172) at
org.hibernate.cfg.Configuration.add(Configuration.java:771) at
org.hibernate.cfg.Configuration.addDocument(Configuration.java:586) at
coldfusion.orm.hibernate.HibernateConfiguration.buildConfiguration(HibernateConfiguration.java:611) at
coldfusion.orm.hibernate.HibernateConfiguration.initHibernateConfiguration(HibernateConfiguration.java:208) at
coldfusion.orm.hibernate.HibernateConfiguration.<init>(HibernateConfiguration.java:181) at
coldfusion.orm.hibernate.ConfigurationManager.initConfiguration(ConfigurationManager.java:67) at
coldfusion.orm.hibernate.HibernateProvider.InitializeORMForApplication(HibernateProvider.java:185) at
coldfusion.orm.hibernate.HibernateProvider.onPageRequestStart(HibernateProvider.java:151) at
coldfusion.filter.ApplicationFilter.firePageRequestStart(ApplicationFilter.java:599) at 
coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:407) at
coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at
coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at
coldfusion.filter.PathFilter.invoke(PathFilter.java:112) at
coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) at
coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79) at
coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at
coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at
coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at
coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at
coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at
coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) at
coldfusion.CfmServlet.service(CfmServlet.java:204) at
coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at
coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414) at
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:203) at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at
java.lang.Thread.run(Thread.java:662) 
java.lang.NullPointerException位于
org.hibernate.mapping.PersistentClass.createPrimaryKey(PersistentClass.java:322)位于
org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:405)位于
org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:321)位于
org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:172)位于
org.hibernate.cfg.Configuration.add(Configuration.java:771)位于
org.hibernate.cfg.Configuration.addDocument(Configuration.java:586)位于
位于的coldfusion.orm.hibernate.HibernateConfiguration.buildConfiguration(HibernateConfiguration.java:611)
HibernateConfiguration.initHibernateConfiguration(HibernateConfiguration.java:208)位于
HibernateConfiguration.(HibernateConfiguration.java:181)位于
coldfusion.orm.hibernate.ConfigurationManager.initConfiguration(ConfigurationManager.java:67)位于
coldfusion.orm.hibernate.HibernateProvider.InitializeORMForApplication(HibernateProvider.java:185)位于
coldfusion.orm.hibernate.HibernateProvider.onPageRequestStart(HibernateProvider.java:151)位于
coldfusion.filter.ApplicationFilter.FireageRequestStart(ApplicationFilter.java:599)位于
coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:407)位于
coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)位于
coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)位于
coldfusion.filter.PathFilter.invoke(PathFilter.java:112)位于
coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)位于
coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79)位于
coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)位于
调用(BrowserFilter.java:38)
调用(NoCacheFilter.java:46)
coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)位于
coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)位于
coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)位于
位于的coldfusion.CfmServlet.service(CfmServlet.java:204)
coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)位于
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)位于
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)位于
位于的coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)中的coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)位于
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)位于
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)位于
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)位于
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)位于
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)位于
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)位于
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)位于
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414)位于
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:203)位于
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)位于
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)位于
位于的java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)位于
run(Thread.java:662)
奇怪的是,我已经在用另一个实体做类似的事情(DiscussionPost扩展了Post):

职位:


讨论职位:

<cfcomponent persistent="true" entityname="DiscussionPost" table="Posts" extends="Post" discriminatorValue="discussionpost">
    <cfproperty name="discussion" fieldtype="many-to-one" cfc="Discussion" fkcolumn="discussion_id">
    <cfproperty name="title" type="string" sqltype="varchar(200)">

</cfcomponent>


我缺少什么?

看起来您可能缺少country.cfc中officeAddress属性的sqltype属性


这解决了您的问题吗?

看起来这可能就是您遇到的问题:

我认为解决方法是将id属性添加到country.cfc:

<cfproperty name="id" fieldtype="id" column="county_id" generator="identity">


上面的代码假设您的id列名为“county_id”。这能解决你的问题吗?

好的。事实证明,这个问题的答案非常简单。通过对代码库进行全局搜索和替换,将“unit”替换为“container”,我能够使应用程序中的单表继承正常工作。认真地这就是我所改变的一切,它起了作用。”“Unit”显然不是CF中的保留字,因为实体
Unit
独立工作,但它一定在某些内部进程中引起了问题(可能是@MikeCauser建议的
getColumnIterator()

谢谢大家的建议

EDIT:这是一个偶然的修复,而不是针对问题根源的修复,不管是什么。真正的解决方案有待找到。

编辑2:我现在很有信心,手头的问题与ColdFusion/Hibernate内部结构有关,而这正是我们所需要的
<cfcomponent persistent="true" entityname="DiscussionPost" table="Posts" extends="Post" discriminatorValue="discussionpost">
    <cfproperty name="discussion" fieldtype="many-to-one" cfc="Discussion" fkcolumn="discussion_id">
    <cfproperty name="title" type="string" sqltype="varchar(200)">

</cfcomponent>
<cfproperty name="id" fieldtype="id" column="county_id" generator="identity">