Ошибка 500: не удалось инициализировать коллекцию в отображении гибернации - PullRequest
0 голосов
/ 23 ноября 2010

Я новичок в Hibernate.Надеюсь, вы, ребята, можете помочь мне отладить ниже ошибки, которая действительно сводит меня с ума.

Я получил таблицу с именем CONTENT_WORKGROUP, которая будет сопоставлена ​​с другой таблицей с именем CONTENT_WORKGROUP_ROLE.Ниже приведены структура таблицы и примеры данных:

CONTENT_WORKGROUP

  1. CM_WORKGROUP_ID NUMBER (15,0)
  2. WORKGROUP_ID NUMBER (15,0)
  3. ROLE_ID VARCHAR2 (20 байт)

CONTENT_WORKGROUP_ROLE

  1. CM_WORKGROUP_ROLE_ID НОМЕР (15,0)
  2. ROLE_ID VARCHAR2 (20 байт 10 * * * * 10 * 20* FUNCTION_ID VARCHAR2 (40 байт)

P / S: одна рабочая группа пользователя может иметь несколько ролей (создатель, администратор, утверждающий).Функцию (Добавить, Изменить, Удалить), которую может выполнять эта рабочая группа, можно запросить по адресу CONTENT_WORKGROUP_ROLE.

Пример данных:

CONTENT_WORKGROUP

CM_WORKGROUP_ID WORKGROUP_ID ROLE_ID1 136 Создатель2 137 Администратор3 136 Администратор

CONTENT_WORKGROUP_ROLE

CM_WORKGROUP_ROLE_ID ROLE_ID FUNCTION_ID

1 Копия создателя2 Создатель Править3 Создатель Удалить4 Создатель Добавить5 Администратор Править6 Администратор утверждает7 Администратор отклонить

Тем не менее, я получаю сообщение об ошибке, когда получаю удержание SET ContentWorkgroupRole определенной рабочей группой.

[23.11.10 15: 28: 56: 053 SGT] 00000039 SystemOut O [23/11/2010 15: 28: 56.053] ОШИБКА JDBCExceptionReporter - ORA-01722: недопустимый номер

[23.11.10 15: 28: 56: 100 SGT] 00000039 ServletWrappe E SRVE0068E: Вышло исключительное исключениеодин из сервисных методов сервлета: действие.Исключительное исключение: javax.servlet.ServletException: не удалось инициализировать коллекцию: [corp.celcom.next.infochannel.model.ContentWorkgroup.contentWorkgroupRole # 1]

Ниже приведен файл сопоставления моего спящего режима: 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" />

CM_WORKGROUP CM_WORKGROUP_ID

ContentWorkgroupRole.hbm.xml

<hibernate-mapping>
<class name="corp.celcom.next.infochannel.model.ContentWorkgroupRole" table="CM_WORKGROUP_ROLE" >
 <id name="cmWorkgroupRoleId" type="long">

CM_WORKGROUP_ROLE_ID CM_WORKGROUP_ROLE * * * * * * * * * * * ** В моем классе ACTION вышеупомянутая ошибка произошла в этой строке: Iterator iter = cw.getContentWorkgroupRole (). Iterator ();

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);}}

Странная часть - когда я меняю ROLE_ID на Integer / Long (т.е. 1-Creator, 2-Administrator), вместо использования String, он работает отлично!Я не мог понять, почему и в чем проблема с моим кодом.

Спасибо за помощь.Мне потребовался 1 день, чтобы справиться с этой ошибкой.Спасибо!

1 Ответ

0 голосов
/ 23 ноября 2010

Извините, похоже, проблема с дисплеем. Я снова пишу здесь:

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" />
        <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>

ContentWorkgroupRole.hbm.xml

<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> 

В моем классе ACTION вышеупомянутая ошибка произошла в этой строке: Iterator iter = cw.getContentWorkgroupRole (). Iterator ();

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);
 }
}
...