1

Unit を County で拡張しようとすると、特にアプリケーションを再起動して ORM を初期化するときに、エラーが発生します。[注: 単一テーブルの継承を試みています]

ORM は私の DB スキーマを管理しています:this.ormsettings.dbcreate=dropcreate

モデル ディレクトリから County.cfc を削除すると、ORM が初期化され、アプリケーションが正常に起動します。County.cfc をモデル ディレクトリに戻すと、エラーが再び発生します。

ColdFusion バージョン 10,282462 MSSQL IIS

単位:

<cfcomponent persistent="true" entityname="Unit" table="Units" discriminatorColumn="type">
    <cfproperty name="id" fieldtype="id" column="unit_id" generator="identity">  
    <cfproperty name="name" default="" type="string" length="50"> 
    <cfproperty name="description" type="string" sqltype="varchar(max)" default="">
    <cfproperty name="active" type="boolean" default="true"> 
</cfcomponent>

郡:

<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) 

奇妙なことに、私はすでに別のエンティティで同様のことを行っています (DiscussionPost は Post を拡張しています):

役職:

<cfcomponent persistent="true" entityname="Post" table="Posts" discriminatorColumn="type">
    <cfproperty name="id" fieldtype="id" column="post_id" generator="identity">
    <cfproperty name="promotions" fieldtype="one-to-many" cfc="PostPromotion" fkcolumn="post_id" singularname="promotion">
    <cfproperty name="comments" fieldtype="one-to-many" cfc="PostComment" fkcolumn="post_id" singularname="comment">    
    <cfproperty name="user" fieldtype="many-to-one" cfc="User" fkcolumn="user_id">
    <cfproperty name="text" type="string" sqltype="varchar(1000)">
    <cfproperty name="timestamp" type="date" ormtype="timestamp">
</cfcomponent>

ディスカッション投稿:

<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>

私は何が欠けていますか?

4

3 に答える 3

1

County.cfc の officeAddress プロパティの sqltype 属性が欠落しているようです

それはあなたの問題を解決しますか?

于 2012-08-04T01:58:17.850 に答える
1

これが発生している問題のようです: https://hibernate.onjira.com/browse/HBX-54

修正は、County.cfc に id プロパティを追加することだと思います。

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

上記のコードは、id 列の名前が「county_id」であることを前提としています。それはあなたの問題を解決しますか?

于 2012-08-14T03:43:50.160 に答える
0

わかった。結局のところ、これに対する答えは非常に簡単でした。コードベースでグローバル検索と置換を行い、「ユニット」を「コンテナー」に置き換えることで、アプリケーションで単一テーブルの継承を正しく機能させることができました。真剣に。それが私が変更したすべてであり、それは機能しました。「ユニット」は明らかにCFの予約語ではありません。これは、エンティティUnitが単独で動作するためですが、何らかの内部プロセスで問題を引き起こしているに違いありません(おそらくgetColumnIterator()@MikeCauserが示唆したように)。

ご提案いただきありがとうございます。

編集:これは偶発的な修正であり、問​​題の根本を対象とした修正ではありません。本当の解決策はまだ見つかっていません。

編集 2: 目前の問題は、ColdFusion サービスの再起動によって更新する必要がある ColdFusion/Hibernate 内部に関係していると確信しています。

はい、2 週間頭を机に何度もぶつけた後、ColdFusion アプリケーション サービスを再起動したところ、問題は解決しました。それ以来、コンテナー コンポーネントをさらに 3 回拡張しました。すべてがうまく表示され、アプリケーションを続行しました。

于 2012-08-17T02:07:23.190 に答える