【问题标题】:ColdFusion 9 ORM Relationship MappingsColdFusion 9 ORM 关系映射
【发布时间】:2012-01-30 03:48:15
【问题描述】:

我正在尝试使用 ColdFusion 9.0.1 ORM 定义表之间的关系。

我有 2 个表:用户和公司

我正在研究用户与公司之间的关系。现在我有这个:

component persistent="true" table="users" datasource="core"
{
    property name="userID" fieldtype="id" column="userID" 
    setter="false" generator="native";

    property name="firstName" length="255";
    property name="lastName" length="255";
    property name="userName" length="45";

    property name="companies" fieldtype="many-to-one" cfc="company" 
    fkcolumn="companyID" singularname="company";

}

component persistent="true" table="companies" datasource="core"
{
    property name="companyID" fieldtype="id" column="companyID" 
    setter="false" generator="native";

    property name="companyName" length="255";
    property name="companyCode" length="45";;

    property name="users" fieldtype="one-to-many" fkcolumn="userID" cfc="user"
    cascade="all" inverse="true";


}

我在写入用户表时遇到问题。我需要将 companyID 写入用户表,以便我可以链接回公司。在此插入中,我不想在公司表中插入任何内容。我只想写入 users 表,并通过 users 表中的 companyID 链接到公司表。

这是我的 EntitySave 代码:

transaction{

        newUser = EntityNew("user");

            newUser.setCompanies(#FORM.companyID#);     
            newUser.setFirstName(#FORM.firstName#);
            newUser.setLastName(#FORM.lastName#);
            newUser.setUserName(#FORM.userName#);

        EntitySave(newUser);

    }

当我这样运行它时,我收到此错误“无法从 companyID 类型的对象中检索属性 java.lang.String 的值。预期的对象类型是公司。”

我在想,也许我需要为 companyID 设置单独的属性,例如“property name="companyID" ormType="int",然后也许我可以使用“newUser.setCompanyID(#FORM.companyID#);” EntitySave 但这不起作用。我在 ORMReload(); 上收到错误消息。

对于建立关系的最佳方式,我显然很困惑。我可以在不尝试正式引用 user.cfc 文件中的关系并且只使用属性 name="companyID" ormType="int" 的情况下完成这项工作,但这并不能让我在表之间建立正确的关系。我想?

在这方面的任何帮助都会很棒。

提前致谢。

【问题讨论】:

  • 如果只是多对一,property name="company" 不是更好吗?

标签: hibernate orm coldfusion


【解决方案1】:

尝试改变这个:

newUser.setCompanies(#FORM.companyID#);     

到这里:

newUser.setCompanies(EntityLoadByPK ("company", FORM.companyID));   

【讨论】:

  • 感谢您的帮助。那没有用,但真的很接近。这工作 newUser.setCompanies(EntityLoadByPK ("company", FORM.companyID, true));现在有道理了。谢谢!
  • 我将更新答案以显示对您有用的方法。很高兴你取得了一些进展。
  • 最后一个“真”是怎么回事?除非您使用EntityLoad(),否则我认为不需要它
【解决方案2】:

最后一个“真”是什么意思?除非您使用 EntityLoad(),否则我认为不需要它–

EntityLoadByPK ("company", FORM.companyID)

返回一个数组,其中包含符合条件(pk=FORM.companyID)的所有实体

EntityLoadByPK ("company", FORM.companyID, true)

返回一个符合条件(pk=FORM.companyID)的对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2011-04-15
    相关资源
    最近更新 更多