ORM EntitySave的setter名称中的变量

时间:2012-01-16 04:24:02

标签: hibernate orm coldfusion

我正在尝试循环使用ColdFusion ORM将数据插入到数据库中。

我在解决语法问题上遇到了问题。这是我想要做的一个例子:

    <cfscript>

        var tn = 'CompanyName';

        transaction{

            newComp = EntityNew("company");

                newComp.set & tn &('ABC Comp');

            EntitySave(newComp);                                                

        }               

    </cfscript>

为了简化这个问题,我只使用一个变量。实际代码循环遍历数据数组,但如果我能弄清楚如何使用变量来处理其余的数据。

我尝试了很多方法,但我无法正确理解语法。

这可能吗?

任何帮助都会很棒。

提前致谢。

3 个答案:

答案 0 :(得分:3)

您可以使用cfinvoke标记来避免评估:

<cfset tn = "CompanyName">
<cftransaction>
<cfset newComp = EntityNew("company")>
<cfinvoke component="#newComp#" method="set#tn#">
      <cfinvokeargument name="#tn#" value="ABC Corp">
</cfinvoke>
</cftransaction>

在示例here

中使用它的更多内容

下一版ColdFusion将带来invoke to script.

答案 1 :(得分:1)

尝试

evaluate( 'newComp.set#tn#( "ABC Comp" )' );

答案 2 :(得分:0)

也许在您的模型中编写一个方法,以接受其API的“动态”状态部分和包裹,例如:

component {
  function setState( Struct state ){
    var key = 0;
    for ( key in state )
    {
      variables[ key ] = state[ key ];
    }
  }
}

然后,在您的调用代码中,传递一个struct:

newComp = EntityNew( 'Company' );
state = {};
state[ tn ] = 'ABC Comp';
newComp.setState( state );

我们在构造函数中经常这样做,允许我们一次性完成任务,类似于Groovy和其他一些语言:

var chuck = new Contact( { firstName = "Chuck", lastName = "Taylor" });