Coldfusion ORM混淆:实体映射中的重复列:

时间:2013-07-26 19:58:33

标签: orm coldfusion coldfusion-9

我刚刚开始使用ORM而且我遇到了困惑。

这是我的错误:

Error Occurred While Processing Request
Repeated column in mapping for entity: skill column: programTypeID (should be mapped with insert="false" update="false")

以下是我使用的基本方案:

TABLES:

**ProgramType**
programTypeID (PK)
programType varchar(50)

**Skill**
skillID (PK)
Skill varchar(50)
programTypeID(int) (FK)

从我的理解我的技能 - 程序类型关系是多对一的...意义许多技能只能有1个程序类型...或者1个程序类型可以映射到许多技能。

Skill.cfc:

<cfcomponent persistent="true">

<cfproperty name="skillid" fieldType="id" generator="identity">
    <cfproperty name="skill" ormType="string">    
    <cfproperty name="programTypeID" ormType="integer">    
    <cfproperty name="programType" fieldtype="many-to-one" fkcolumn="programTypeID" cfc="programType">    
</cfcomponent>

ProgramType.cfc

<cfcomponent persistent="true" table="programtype">

    <cfproperty name="programtypeid" fieldType="id" generator="identity">
    <cfproperty name="programtype" ormType="string">

   <cfproperty name="skill" fieldType="one-to-many" type="array" cfc="skill" fkcolumn="programTypeID" inverse="true">

</cfcomponent>

SkillEditForm.cfm

<cfoutput>
<form class="form-horizontal" action="submit.cfm" method="post">
<input name="skillid" type="hidden" value="#skill.getSkillid()#">

  <div class="control-group">
    <label class="control-label" for="programTypeID">Skill</label>
    :
    <div class="controls">
        <select name="programTypeID">
        <cfloop index="programType" array="#programTypes#">
            <option value="#programType.getProgramTypeID()#"

            <cfif programType.getProgramtypeid() eq skillProgramType.getProgramTypeid()>selected</cfif>

            >#programType.getProgramType()#</option>
        </cfloop>
        </select>
    </div>
  </div>


  <div class="control-group">
    <label class="control-label" for="skill">Skill</label>
    :
    <div class="controls">
      <input type="text" id="skill" placeholder="" name="skill" value="#skill.getSkill()#">
    </div>
  </div>

  <div class="control-group">
    <div class="controls">
      <button type="submit" class="btn">Submit</button>
    </div>
  </div>                  

</form>
</cfoutput>

我发现如果从skill.cfc中删除programTypeID,我的错误就会消失。但是,如果在我的CFC中没有定义programTYpeID,当我在submit.cfc页面上添加或更新我的实体时,我的混乱就会运行...我将如何从表单上的选择框中设置programTypeID?

1 个答案:

答案 0 :(得分:2)

您需要删除programTypeId属性,否则您将拥有2个具有该名称的列,因为您定义的关系将创建一个。

首先需要获取与传入的ID匹配的程序类型,然后在Skill对象中设置该值,例如(假设您已经创建了Skill对象)

var programType = entityLoadByPK( 'programType', form.programTypeId)
skill.setProgramType( programType )

作为验证的一部分,您还需要确保在尝试保存之前programType不为null。