我是 Hibernate 的新手。希望你们能帮我调试下面的错误,这真的让我抓狂。
我有一个名为 CONTENT_WORKGROUP 的表,它将映射到另一个名为 CONTENT_WORKGROUP_ROLE 的表。下面是表结构和示例数据:
CONTENT_WORKGROUP
- CM_WORKGROUP_ID NUMBER(15,0)
- WORKGROUP_ID NUMBER(15,0)
- ROLE_ID VARCHAR2(20 BYTE)
CONTENT_WORKGROUP_ROLE
- CM_WORKGROUP_ROLE_ID NUMBER(15,0)
- ROLE_ID VARCHAR2(20 BYTE)
- FUNCTION_ID VARCHAR2(40 字节)
P/S:一个用户工作组可以有多个角色(创建者、管理员、审批者)。该工作组可以执行的功能(添加、编辑、删除)可以从 CONTENT_WORKGROUP_ROLE 中查询。
样本数据:
CONTENT_WORKGROUP
CM_WORKGROUP_ID WORKGROUP_ID ROLE_ID
1 136 创建者
2 137 管理员
3 136 管理员
CONTENT_WORKGROUP_ROLE
CM_WORKGROUP_ROLE_ID ROLE_ID FUNCTION_ID
1 创建者复制
2 创建者编辑
3 创建者删除
4 创建者添加
5 管理员编辑
6 管理员批准
7 管理员拒绝
但是,当我获得特定工作组持有的 ContentWorkgroupRole 的 SET 时出现错误。
[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 的服务方法之一中抛出未捕获的异常:操作。抛出异常: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
内容工作组角色.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
<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>
在我的 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 天时间来处理这个错误。谢谢!