ColdFusion ORM是加载基本组件而不是派生组件?

时间:2015-07-08 20:17:33

标签: hibernate orm coldfusion coldfusion-9

假设我们有一个Request基本组件,RequestARequestB子类使用每个子类的表映射,没有鉴别器。

我们总是entityLoadByPk('Request', someSubclassEntityId),该方法会返回RequestARequestB组件的实例。

不知何故,它今天早上停止了这样的行为,代码根本没有改变。 entityLoadByPk函数现在返回Request的实例,而不是派生的组件。

为了确保代码没有改变,我们将整个应用程序复制粘贴到另一个ColdFusion盒子上(运行CF11),它的行为就像我们在CF9盒子上做的那样。

显然,CF9包装盒上必须有一个设置或改变的东西,但我们看了一下我们想到的一切,我们根本找不到任何解释。

即使我们重新启动服务器并清除了我们可以想到的所有可能的缓存(模板缓存,组件缓存,我们也称为ormEvictQueries和ormEvictEntity),问题仍然存在。

以下是ORM设置:

<cfset this.ormSettings = {
    dialect = 'MicrosoftSQLServer',
    eventHandling = true,
    flushAtRequestEnd = false,
    logSql = true,
    saveMapping = false,
    cfcLocation = domainModelLocation
}>

这是一个映射示例(我剥离了不必要的关系):

<!--- IPSRequest.cfc --->
<cfcomponent persistent="true" table="IPSRequest" lazy="no">
    <cfproperty name="id" type="numeric" fieldtype="id" column="id" generator="assigned">

</cfcomponent>

<!--- IPSInfoManFileTracerRequest.cfc --->
<cfcomponent 
    persistent="yes" 
    extends="IPSRequest" 
    table="IPSInfoManFileTracerRequest"
    joincolumn="ips_request_id">

    <!--- The id property was repeated because of a bug --->
    <cfproperty name="id" type="numeric" fieldtype="id" column="ips_request_id" generator="assigned">

</cfcomponent>

这是CF9框中生成的映射:

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class entity-name="IPSRequest" lazy="false"
        name="cfc:charities.cts.cfc.model.ips.request.IPSRequest" table="IPSRequest">
        <id name="id" type="int">
            <column length="10" name="id"/>
            <generator class="assigned"/>
        </id>
    </class>
</hibernate-mapping>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class entity-name="InfoManFileTracerRequest" lazy="true"
        name="cfc:CHARITIES.CTS.cfc.model.ips.request.InfoManFileTracerRequest" table="IPSInfoManFileTracerRequest">
        <id name="id" type="int">
            <column length="10" name="ips_request_id"/>
            <generator class="assigned"/>
        </id>
    </class>
</hibernate-mapping>

这是在CF11盒子上生成的映射,代码相同:

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class entity-name="IPSRequest" lazy="false"
        name="cfc:charities.cts.cfc.model.ips.request.IPSRequest" table="IPSRequest">
        <id name="id" type="int">
            <column length="10" name="id"/>
            <generator class="assigned"/>
        </id>
    </class>
</hibernate-mapping>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <joined-subclass entity-name="InfoManFileTracerRequest"
        extends="cfc:charities.cts.cfc.model.ips.request.IPSRequest"
        lazy="true"
        name="cfc:charities.CTS.cfc.model.ips.request.InfoManFileTracerRequest" table="IPSInfoManFileTracerRequest">
        <key column="ips_request_id"/>
    </joined-subclass>
</hibernate-mapping>

我们可以看到CF9盒子上的映射看起来不正确,但过去使用相同的代码就可以正常工作了。

CF9格式上应用的最新修补程序为hf902-00007.jar,并于2014年完成。

我必须说我很困惑,不知道会改变什么行为?

修改

我们将CF9盒升级到CF11,尽管我们使用迁移工具导入配置设置,但问题仍然存在。

我们很高兴它确实解决了这个问题,但非常担心不知道影响行为的因素,看看ColdFusion有多么脆弱。

我们的生产箱目前仍在CF9上运行......

0 个答案:

没有答案