【问题标题】:error : java.lang.String cannot be cast to coldfusion.cfc.CFCBeanProxy anyone know about this?错误:java.lang.String 无法转换为 Coldfusion.cfc.CFCBeanProxy 有人知道吗?
【发布时间】:2010-04-30 17:57:04
【问题描述】:

有人知道我在尝试使用 ColdFusion 9 Hibernate 集成在我的条目实体中插入外键值时遇到的这个错误吗?

java.lang.ClassCastException:java.lang.String 无法转换为 Coldfusion.cfc.CFCBeanProxy

根本原因:org.hibernate.HibernateException: java.lang.ClassCastException: java.lang.String 无法转换为 Coldfusion.cfc.CFCBeanProxy

下面是我的实体对象的代码,然后是我的用户对象的代码..

这有什么问题吗?

entry.cfc

/**
* Entries Object
*/
component output="false" persistent="true"{
    property name="entry_id" fieldType="id" generator="uuid";
    property name="entryBody" ormType="text";
    property name="title" notnull="true" type="string";
    property name="time" fieldtype="timestamp";
    property name="isCompleted" ormType="boolean" dbdefault="0" default="false";
    property name="userID" fieldtype="many-to-one" fkcolumn="userID" cfc="user";

    Entry function init() output=false{
        return this;
    }
}

user.cfc

/**
* Users Object
*/
component output="false" persistent="true"{
    property name="userID" fieldType="id" generator="uuid";
    property name="firstName" notnull="true" type="string";
    property name="lastName" notnull="true" type="string";
    property name="password" notnull="true" type="string";
    property name="userType" notnull="true" type="string";
    //property name="entry" fieldtype="one-to-many" type="array" fkcolumn="userID" cfc="entry";

    User function init() output=false{
        return this;
    }
}

【问题讨论】:

  • output="false" 对于脚本样式的组件来说并不是真正需要的。

标签: hibernate orm coldfusion coldfusion-9


【解决方案1】:
property name="user" type="User" fieldtype="many-to-one" fkcolumn="userID" cfc="User";

因为属性应该是用户类型,而不是 ID?在 CF-ORM/Hibernate 中,没有办法只设置 FK。你必须...

entry = EntityNew("Entry");
user = EntityLoadByPK("user",1);
entry.setUser(user);

【讨论】:

  • 感谢亨利,我得到了我现在收到这个不同的错误消息:错误类型:ColdBox.plugins.BeanFactory.PopulateBeanException:[N/A] 错误消息:填充 bean guestbook.model.entry 时出错类型为 java.lang.String 的参数 USER。如果将组件名称指定为此参数的类型,则可能无法找到组件的定义文件或无法访问。传递给 SETUSER 函数的用户参数不是用户类型。
  • 这意味着,您应该从冷箱的 RC 中删除用户(实际上是 userID:String)。然后在调用填充后自己设置用户。
  • 很抱歉,我从哪里删除用户?
  • getPlugin("beanFactory").populateBean() 从 RC 填充 bean(即 FORM + URL 范围)。因此,由于您的 rc.user 当前是一个包含用户 ID 的字符串,并且 populateBean() 正在调用导致异常的 setUser(rc.user)。
  • 要么:重命名您的视图/表单以使用用户 ID 而不是用户,因此 populateBean() 不会抱怨。或者,在调用 populateBean() 之前,将 rc.user 备份为用户 ID,从 rc 中删除。然后最后:entry.setUser(entityLoadByPK("user", userID));
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多