Oracle 错误500:无法在hibernate映射中初始化集合

Oracle 错误500:无法在hibernate映射中初始化集合,oracle,set,hibernate-mapping,ora-01722,Oracle,Set,Hibernate Mapping,Ora 01722,我是冬眠的新手。希望你们能帮我调试下面的错误,这真的让我发疯 我得到了一个名为CONTENT\u WORKGROUP的表,它将映射到另一个名为CONTENT\u WORKGROUP\u ROLE的表。下表结构和样本数据如下: 内容工作组 CM_工作组_ID号(15,0) 工作组ID号(15,0) 角色ID VARCHAR2(20字节) 内容\工作组\角色 CM_工作组_角色_ID号(15,0) 角色ID VARCHAR2(20字节) 函数\u ID VARCHAR2(40字节) p/S:一个用户

我是冬眠的新手。希望你们能帮我调试下面的错误,这真的让我发疯

我得到了一个名为CONTENT\u WORKGROUP的表,它将映射到另一个名为CONTENT\u WORKGROUP\u ROLE的表。下表结构和样本数据如下:

内容工作组
  • CM_工作组_ID号(15,0)
  • 工作组ID号(15,0)
  • 角色ID VARCHAR2(20字节)
  • 内容\工作组\角色
  • CM_工作组_角色_ID号(15,0)
  • 角色ID VARCHAR2(20字节)
  • 函数\u ID VARCHAR2(40字节)
  • p/S:一个用户工作组可以有多个角色(创建者、管理员、审批人)。此工作组可以执行的功能(添加、编辑、删除)可以从内容\工作组\角色进行查询。

    样本数据:

    内容工作组 CM_工作组\u ID工作组\u IDROLE\u ID
    1136Creator
    2137管理员
    3136管理员

    内容\工作组\角色 CM\U工作组\U角色\U ID角色\U ID功能\U ID

    1细菌检验
    2CreatorEdit
    3CreatorDelete
    4 Creatoradd
    5管理编辑
    6管理者批准
    7管理员弹出

    但是,当我获取由特定工作组持有的ContentWorkgroupRole集合时,就会出现错误

    [11/23/10 15:28:56:053 SGT]00000039 SystemOut O[23/11/2010 15:28:56.053]错误JDBCExceptionReporter-ORA-01722:无效号码

    [11/23/10 15:28:56:100 SGT]00000039 ServletWrappe E SRVE0068E:在servlet:action的一个服务方法中引发了未捕获的异常。引发异常:javax.servlet.ServletException:无法初始化集合:[corp.celcom.next.infochannel.model.ContentWorkgroup.contentWorkgroupRole#1]

    下面是我的hibernate映射文件: ContentWorkgroup.hbm.xml

    <hibernate-mapping>
    <class name="corp.celcom.next.infochannel.model.ContentWorkgroup" table="CM_WORKGROUP" >
        <id name="cmWorkgroupId" type="long">
            <column name="CM_WORKGROUP_ID" precision="15" scale="0" />
    
    <hibernate-mapping>
    <class name="corp.celcom.next.infochannel.model.ContentWorkgroup" table="CM_WORKGROUP" >
        <id name="cmWorkgroupId" type="long">
            <column name="CM_WORKGROUP_ID" precision="15" scale="0" />
            <generator class="corp.celcom.next.util.MultipleTableGenerator" >
                <param name="KEYTABLE_VALUE">CM_WORKGROUP</param>
                <param name="KEYCOLUMN_VALUE">CM_WORKGROUP_ID</param>
            </generator>
        </id>
        <property name="workgroupId" type="long">
            <column name="WORKGROUP_ID" precision="15" scale="0" not-null="true" />
        </property>
        <property name="srId" type="string">
            <column name="SR_ID" length="15" not-null="true" />
        </property>
        <property name="contentCategoryId" type="string">
            <column name="CONTENT_CATEGORY_ID" length="40" not-null="true" />
        </property>
        <property name="roleId" type="string">
            <column name="ROLE_ID" length="20" not-null="true" />
        </property>
        <set name="contentWorkgroupRole" table="CM_WORKGROUP_ROLE" inverse="true">
            <key>
                <column name="ROLE_ID" length="20" not-null="true" />
            </key>
            <one-to-many class="corp.celcom.next.infochannel.model.ContentWorkgroupRole" />
        </set>        
    </class>
    
    myForm.setallowad(真); if(role.getFunctionId().equalsIgnoreCase(Constant.EDIT)) myForm.setAllowEdit(true); if(role.getFunctionId().equalsIgnoreCase(Constant.DELETE)) myForm.setAllowDelete(true); } }

    奇怪的是,当我将角色_ID更改为Integer/Long(即1-Creator,2-Administrator)而不是使用字符串时,它工作正常!我不明白为什么我的代码出现了问题,也不明白是什么问题


    谢谢你的帮助。我已经花了一天的时间来处理这个错误。谢谢

    对不起,显示屏似乎有点问题。我在这里再次写道:

    ContentWorkgroup.hbm.xml

    <hibernate-mapping>
    <class name="corp.celcom.next.infochannel.model.ContentWorkgroup" table="CM_WORKGROUP" >
        <id name="cmWorkgroupId" type="long">
            <column name="CM_WORKGROUP_ID" precision="15" scale="0" />
    
    <hibernate-mapping>
    <class name="corp.celcom.next.infochannel.model.ContentWorkgroup" table="CM_WORKGROUP" >
        <id name="cmWorkgroupId" type="long">
            <column name="CM_WORKGROUP_ID" precision="15" scale="0" />
            <generator class="corp.celcom.next.util.MultipleTableGenerator" >
                <param name="KEYTABLE_VALUE">CM_WORKGROUP</param>
                <param name="KEYCOLUMN_VALUE">CM_WORKGROUP_ID</param>
            </generator>
        </id>
        <property name="workgroupId" type="long">
            <column name="WORKGROUP_ID" precision="15" scale="0" not-null="true" />
        </property>
        <property name="srId" type="string">
            <column name="SR_ID" length="15" not-null="true" />
        </property>
        <property name="contentCategoryId" type="string">
            <column name="CONTENT_CATEGORY_ID" length="40" not-null="true" />
        </property>
        <property name="roleId" type="string">
            <column name="ROLE_ID" length="20" not-null="true" />
        </property>
        <set name="contentWorkgroupRole" table="CM_WORKGROUP_ROLE" inverse="true">
            <key>
                <column name="ROLE_ID" length="20" not-null="true" />
            </key>
            <one-to-many class="corp.celcom.next.infochannel.model.ContentWorkgroupRole" />
        </set>        
    </class>
    
    <hibernate-mapping>
    <class name="corp.celcom.next.infochannel.model.ContentWorkgroup" table="CM_WORKGROUP" >
        <id name="cmWorkgroupId" type="long">
            <column name="CM_WORKGROUP_ID" precision="15" scale="0" />
            <generator class="corp.celcom.next.util.MultipleTableGenerator" >
                <param name="KEYTABLE_VALUE">CM_WORKGROUP</param>
                <param name="KEYCOLUMN_VALUE">CM_WORKGROUP_ID</param>
            </generator>
        </id>
        <property name="workgroupId" type="long">
            <column name="WORKGROUP_ID" precision="15" scale="0" not-null="true" />
        </property>
        <property name="srId" type="string">
            <column name="SR_ID" length="15" not-null="true" />
        </property>
        <property name="contentCategoryId" type="string">
            <column name="CONTENT_CATEGORY_ID" length="40" not-null="true" />
        </property>
        <property name="roleId" type="string">
            <column name="ROLE_ID" length="20" not-null="true" />
        </property>
        <set name="contentWorkgroupRole" table="CM_WORKGROUP_ROLE" inverse="true">
            <key>
                <column name="ROLE_ID" length="20" not-null="true" />
            </key>
            <one-to-many class="corp.celcom.next.infochannel.model.ContentWorkgroupRole" />
        </set>        
    </class>
    
    <hibernate-mapping>
    <class name="corp.celcom.next.infochannel.model.ContentWorkgroupRole" table="CM_WORKGROUP_ROLE" >
        <id name="cmWorkgroupRoleId" type="long">
            <column name="CM_WORKGROUP_ROLE_ID" precision="15" scale="0" />
            <generator class="corp.celcom.next.util.MultipleTableGenerator">
                <param name="KEYCOLUMN_VALUE">CM_WORKGROUP_ROLE_ID</param>
                <param name="KEYTABLE_VALUE">CM_WORKGROUP_ROLE</param>
            </generator>
        </id>
    
        <many-to-one name="contentWorkgroup" class="corp.celcom.next.infochannel.model.ContentWorkgroup" fetch="select">
            <column name="ROLE_ID" precision="15" scale="0" />
        </many-to-one>
    
        <property name="menuId" type="string">
            <column name="MENU_ID" length="40" not-null="true" />
        </property>
        <property name="functionId" type="string">
            <column name="FUNCTION_ID" length="40" not-null="true" />
        </property> 
    
    for(ContentWorkgroup cw : contentWorkgroupList)
    {
        Iterator iter = cw.getContentWorkgroupRole().iterator();
    
        while (iter.hasNext()) {
    
         ContentWorkgroupRole role = (ContentWorkgroupRole) iter.next();
    
         if (role.getFunctionId().equalsIgnoreCase(Constant.ADD))
            myForm.setAllowAdd(true);
         if (role.getFunctionId().equalsIgnoreCase(Constant.EDIT))
            myForm.setAllowEdit(true);
         if (role.getFunctionId().equalsIgnoreCase(Constant.DELETE))
            myForm.setAllowDelete(true);
     }
    }