Hibernate ColdFusion Form mappedSuperClass.hbmxml的字段太多
当我运行下面的代码时,ColdFusion 9(更新为最新版本)为billingaddress cfc生成了一个错误的(imho)XML文件。也就是说,它包括base.cfc的属性。这是一个bug,是我遗漏了什么,还是这是预期的行为 Application.cfc base.cfc 地址:cfc billingaddress.cfc billingaddress.hbmxmlHibernate ColdFusion Form mappedSuperClass.hbmxml的字段太多,hibernate,orm,coldfusion,coldfusion-9,Hibernate,Orm,Coldfusion,Coldfusion 9,当我运行下面的代码时,ColdFusion 9(更新为最新版本)为billingaddress cfc生成了一个错误的(imho)XML文件。也就是说,它包括base.cfc的属性。这是一个bug,是我遗漏了什么,还是这是预期的行为 Application.cfc base.cfc 地址:cfc billingaddress.cfc billingaddress.hbmxml 这是我所期望的行为。扩展组件将导致子组件继承父组件的属性。当您有多个继承级别时,它将继承整个链 在阅读了你的评论之后,我
这是我所期望的行为。扩展组件将导致子组件继承父组件的属性。当您有多个继承级别时,它将继承整个链 在阅读了你的评论之后,我进一步研究了这个问题。据我所知,您所描述的问题首先出现在中,可能(这里只是猜测)是此错误修复的结果: 当 CFC将属性mappedSuperclass设置为的基本CFC扩展为 对 引用的bug是#83474,我在Adobe的bug跟踪器上找不到它。它反映在Elliot Sprehn的网站上 我还发现了关于同一问题的另一个问题:。该问题中报告的解决方法是手动编辑hbmxml文件
长话短说,它看起来像一个CF bug。我戳了大约20分钟,除了手动编辑hbmxml文件以删除billingaddress.cfc中的额外属性外,找不到其他解决方法。您知道在使用mappedSuperClass=“true”时,我应该如何重新创建它吗?因为当我这样做的时候,hibernate会返回一个重复的列错误:
实体映射中的重复列:billingaddress列:deleted(应该用insert=“false”update=“false”)映射)
,这很有意义。我很好奇,为什么它会知道它需要继承“id”列,而不是其他列。这似乎是CF9的一个错误,我在Railo 4.2中测试了相同的代码,它在那里按预期工作。大约一个小时后,我可以在CF11上试一试。我没有安装任何早期版本。感谢您的帮助,我已经接受了您的答案,并将使用手动hbmxml文件,至少现在是这样。我发现了该错误的原因,但它被标记为已修复。您为什么选择dbcreate=“dropcreate”和savemapping=true?此外,在onRequestStart()中使用ormreload()会导致在每次请求时重新生成模型。在onApplicationStart()中使用它更正常。是的,原因是,这只是一个测试设置,用于验证我的理智。在live和dev环境中,我们使用不同的设置运行(对于live,dbcreate=“none”)
component
{
this.name = "ormtest";
this.mappings["/model"] = expandPath( "./model" );
this.datasource = "mingo";
this.ormEnabled = true;
this.ormSettings = {
CFCLocation = "/model",
dbcreate = "dropcreate",
savemapping = true
};
function onRequestStart()
{
ormreload();
}
}
component mappedSuperClass = "true"
{
property fieldType = "id" name = "id" generator = "guid";
property fieldType = "column" name = "deleted" ORMType = "boolean" default = "0" notnull = "true";
property fieldType = "column" name = "sortorder" ORMType = "integer";
property fieldType = "column" name = "label";
}
component extends = "model.base"
persistent = "true"
table="address"
discriminatorColumn = "discriminator"
{
property name = "address";
}
component extends = "model.address"
persistent = "true"
table="address"
discriminatorValue = "billingaddress"
{}
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<subclass discriminator-value="billingaddress"
entity-name="billingaddress" extends="cfc:model.address"
lazy="true" name="cfc:model.billingaddress">
<property name="deleted" type="boolean">
<column name="deleted" not-null="true"/>
</property>
<property name="sortorder" type="integer">
<column name="sortorder"/>
</property>
<property name="label" type="string">
<column name="label"/>
</property>
</subclass>
</hibernate-mapping>