一个初学者的CMP关联问题

xxbb 2004-10-17 11:25:10
最近学到EJB的CMP关联,我就想做一个论坛,我的开发环境是:JBUILDER+WEBLOGIC+MYSQL,topic表和reply表是一对多的关系,关联字段是topic表的topicid和reply表的topicid,我建的两个表如下:
CREATE TABLE `topic` (
`topicid` varchar(50) NOT NULL default '',
`title` varchar(100) NOT NULL default '',
`author` varchar(30) NOT NULL default '',
`point` int(10) unsigned NOT NULL default '0',
`reversion` int(10) unsigned NOT NULL default '0',
`content` varchar(255) NOT NULL default '',
`topictime` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`topicid`),
KEY `index1` (`topicid`)
) TYPE=MyISAM;

CREATE TABLE `reply` (
`replyid` varchar(100) NOT NULL default '',
`author` varchar(30) NOT NULL default '',
`replytime` datetime NOT NULL default '0000-00-00 00:00:00',
`content` varchar(255) NOT NULL default '',
`topicid` varchar(50) NOT NULL default '',
PRIMARY KEY (`replyid`),
KEY `index1` (`topicid`),
KEY `index2` (`replyid`)
) TYPE=MyISAM;

当我回复的时,也就是向reply表插入值时,就会有下面的错误(值也没有插入表中):
javax.ejb.TransactionRolledbackLocalException: EJB Exception:; nested exception is: javax.ejb.EJBExceptio
n: [EJB:010145]When a cmp-field and a cmr-field (relationship) are mapped to the same column, the setXXX
method for the cmp-field may not be called. The cmp-field is read-only.
javax.ejb.EJBException: [EJB:010145]When a cmp-field and a cmr-field (relationship) are mapped to the sam
e column, the setXXX method for the cmp-field may not be called. The cmp-field is read-only.
at dzsw2005.Reply_wit634__WebLogic_CMP_RDBMS.setTopicid(Reply_wit634__WebLogic_CMP_RDBMS.java:479
)
at dzsw2005.ReplyBean.ejbCreate(ReplyBean.java:19)
at dzsw2005.Reply_wit634__WebLogic_CMP_RDBMS.ejbCreate(Reply_wit634__WebLogic_CMP_RDBMS.java:2045
)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at weblogic.ejb20.manager.DBManager.create(DBManager.java:1180)
at weblogic.ejb20.manager.DBManager.localCreate(DBManager.java:1138)
at weblogic.ejb20.internal.EntityEJBLocalHome.create(EntityEJBLocalHome.java:170)
at dzsw2005.Reply_wit634_LocalHomeImpl.create(Reply_wit634_LocalHomeImpl.java:79)
at dzsw2005.ForumFacadeBean.newreply(ForumFacadeBean.java:82)
at dzsw2005.ForumFacade_xgr9io_EOImpl.newreply(ForumFacade_xgr9io_EOImpl.java:46)
at com.xb.InsertReplyAction.execute(InsertReplyAction.java:31)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996
)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContex
t.java:6452)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
javax.ejb.TransactionRolledbackLocalException: EJB Exception:; nested exception is: javax.ejb.EJBExceptio
n: [EJB:010145]When a cmp-field and a cmr-field (relationship) are mapped to the same column, the setXXX
method for the cmp-field may not be called. The cmp-field is read-only.
at weblogic.ejb20.internal.EJBRuntimeUtils.throwTransactionRolledbackLocal(EJBRuntimeUtils.java:2
47)
at weblogic.ejb20.internal.BaseEJBLocalHome.handleSystemException(BaseEJBLocalHome.java:246)
at weblogic.ejb20.internal.EntityEJBLocalHome.create(EntityEJBLocalHome.java:181)
at dzsw2005.Reply_wit634_LocalHomeImpl.create(Reply_wit634_LocalHomeImpl.java:79)
at dzsw2005.ForumFacadeBean.newreply(ForumFacadeBean.java:82)
at dzsw2005.ForumFacade_xgr9io_EOImpl.newreply(ForumFacade_xgr9io_EOImpl.java:46)
at com.xb.InsertReplyAction.execute(InsertReplyAction.java:31)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996
)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContex
t.java:6452)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
有没有谁遇见过这样的错误吗/??请大家能教教我!先谢谢你们了!
...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevin_cn 2004-10-19
  • 打赏
  • 举报
回复
学习,帮你顶
xxbb 2004-10-19
  • 打赏
  • 举报
回复
JBUILDER自动生成的配置文件是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<display-name>EJBModule1</display-name>
<enterprise-beans>
<entity>
<ejb-name>Topic</ejb-name>
<local-home>dzsw2005.TopicHome</local-home>
<local>dzsw2005.Topic</local>
<ejb-class>dzsw2005.TopicBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Topic</abstract-schema-name>
<cmp-field>
<field-name>topicid</field-name>
</cmp-field>
<cmp-field>
<field-name>title</field-name>
</cmp-field>
<cmp-field>
<field-name>author</field-name>
</cmp-field>
<cmp-field>
<field-name>point</field-name>
</cmp-field>
<cmp-field>
<field-name>reversion</field-name>
</cmp-field>
<cmp-field>
<field-name>content</field-name>
</cmp-field>
<cmp-field>
<field-name>topictime</field-name>
</cmp-field>
<primkey-field>topicid</primkey-field>
</entity>
<session>
<ejb-name>ForumFacade</ejb-name>
<home>dzsw2005.ForumFacadeHome</home>
<remote>dzsw2005.ForumFacade</remote>
<ejb-class>dzsw2005.ForumFacadeBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
<entity>
<ejb-name>Reply</ejb-name>
<local-home>dzsw2005.ReplyHome</local-home>
<local>dzsw2005.Reply</local>
<ejb-class>dzsw2005.ReplyBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Reply</abstract-schema-name>
<cmp-field>
<field-name>replyid</field-name>
</cmp-field>
<cmp-field>
<field-name>author</field-name>
</cmp-field>
<cmp-field>
<field-name>replytime</field-name>
</cmp-field>
<cmp-field>
<field-name>content</field-name>
</cmp-field>
<cmp-field>
<field-name>topicid</field-name>
</cmp-field>
<primkey-field>replyid</primkey-field>
</entity>
</enterprise-beans>
<relationships>
<ejb-relation>
<ejb-relation-name>topic-reply</ejb-relation-name>
<ejb-relationship-role>
<description>topic</description>
<ejb-relationship-role-name>TopicRelationshipRole</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<description>topic</description>
<ejb-name>Topic</ejb-name>
</relationship-role-source>
<cmr-field>
<description>reply</description>
<cmr-field-name>reply</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<description>reply</description>
<ejb-relationship-role-name>ReplyRelationshipRole</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<relationship-role-source>
<description>reply</description>
<ejb-name>Reply</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
</relationships>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Topic</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>ForumFacade</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>Reply</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-rdbms-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB RDBMS Persistence//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-rdbms20-persistence-810.dtd">
<weblogic-rdbms-jar>
<weblogic-rdbms-bean>
<ejb-name>Topic</ejb-name>
<data-source-name>dzswejb</data-source-name>
<table-map>
<table-name>topic</table-name>
<field-map>
<cmp-field>topicid</cmp-field>
<dbms-column>topicid</dbms-column>
</field-map>
<field-map>
<cmp-field>title</cmp-field>
<dbms-column>title</dbms-column>
</field-map>
<field-map>
<cmp-field>author</cmp-field>
<dbms-column>author</dbms-column>
</field-map>
<field-map>
<cmp-field>point</cmp-field>
<dbms-column>point</dbms-column>
</field-map>
<field-map>
<cmp-field>reversion</cmp-field>
<dbms-column>reversion</dbms-column>
</field-map>
<field-map>
<cmp-field>content</cmp-field>
<dbms-column>content</dbms-column>
</field-map>
<field-map>
<cmp-field>topictime</cmp-field>
<dbms-column>topictime</dbms-column>
</field-map>
</table-map>
</weblogic-rdbms-bean>
<weblogic-rdbms-bean>
<ejb-name>Reply</ejb-name>
<data-source-name>dzswejb</data-source-name>
<table-map>
<table-name>reply</table-name>
<field-map>
<cmp-field>replyid</cmp-field>
<dbms-column>replyid</dbms-column>
</field-map>
<field-map>
<cmp-field>author</cmp-field>
<dbms-column>author</dbms-column>
</field-map>
<field-map>
<cmp-field>replytime</cmp-field>
<dbms-column>replytime</dbms-column>
</field-map>
<field-map>
<cmp-field>content</cmp-field>
<dbms-column>content</dbms-column>
</field-map>
<field-map>
<cmp-field>topicid</cmp-field>
<dbms-column>topicid</dbms-column>
</field-map>
</table-map>
</weblogic-rdbms-bean>
<weblogic-rdbms-relation>
<relation-name>topic-reply</relation-name>
<weblogic-relationship-role>
<relationship-role-name>ReplyRelationshipRole</relationship-role-name>
<relationship-role-map>
<foreign-key-table>reply</foreign-key-table>
<primary-key-table>topic</primary-key-table>
<column-map>
<foreign-key-column>topicid</foreign-key-column>
<key-column>topicid</key-column>
</column-map>
</relationship-role-map>
</weblogic-relationship-role>
</weblogic-rdbms-relation>
</weblogic-rdbms-jar>
xxbb 2004-10-19
  • 打赏
  • 举报
回复
真的没有人遇见这样的问题吗!
serf 2004-10-17
  • 打赏
  • 举报
回复
你应该把配置文件贴出来。错误内容是你把一个字段和一个关系应射了相同的名字。

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧