这样的问题别人很难帮你解决的,你自己找个成功的配置文件看一下(不同的server各不相同),比较一下你的relation的描述,一般你自己就可以发现问题出在哪,不难的,重要的细心。

解决方案 »

  1.   

    大哥,我就是找不到成功的配置文件啊,搞了几天了,还不行,真要发疯了我用的是jb8+weblogic 7,有两个表:1.
      YHDM  VARCHAR2(8) NOT NULL,
      YHM  VARCHAR2(30),
    2
      YHDM  VARCHAR2(4) NOT NULL,
      GNH  VARCHAR2(8) NOT NULL,
      XS  NUMBER(1),
      ZT  NUMBER(1)
      
    我在同一个包里建了两个ejb,用yhdm字段连接,然后建一个一对多的relation,编译打包都行,但布署时就出错了,提示:
    In relation ejb1-ejb2, Bean: ejb1 method: getejb2 for a cmr-field is not defined on the bean class, or the parameter types are incorrect.
    In bean ejb1, the cmr setXXX method, setejb2, defined for relationship, ejb1-ejb2, is not defined on the bean class, or the parameter type is incorrect. The parameter type must be the local interface type of the related bean if the related bean has a local interface.
    -------------------------------------------------------------------
    <?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>
        <enterprise-beans>
            <entity>
                <display-name>Yhdjb</display-name>
                <ejb-name>Yhdjb</ejb-name>
                <local-home>com.gdc.ejb.xtyh.YhdjbHome</local-home>
                <local>com.gdc.ejb.xtyh.Yhdjb</local>
                <ejb-class>com.gdc.ejb.xtyh.YhdjbBean</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>Yhdjb</abstract-schema-name>
                <cmp-field>
                    <field-name>yhdm</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>yhm</field-name>
                </cmp-field>
                <primkey-field>yhdm</primkey-field>
            </entity>
            <entity>
                <display-name>Czqxb</display-name>
                <ejb-name>Czqxb</ejb-name>
                <local-home>com.gdc.ejb.xtyh.CzqxbHome</local-home>
                <local>com.gdc.ejb.xtyh.Czqxb</local>
                <ejb-class>com.gdc.ejb.xtyh.CzqxbBean</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>Czqxb</abstract-schema-name>
                <cmp-field>
                    <field-name>yhdm</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>gnh</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>zt</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>xs</field-name>
                </cmp-field>
                <primkey-field>yhdm</primkey-field>
            </entity>
        </enterprise-beans>
        <relationships>
            <ejb-relation>
                <ejb-relation-name>yhdjb-czqxb</ejb-relation-name>
                <ejb-relationship-role>
                    <description>yhdjb</description>
                    <ejb-relationship-role-name>YhdjbRelationshipRole</ejb-relationship-role-name>
                    <multiplicity>One</multiplicity>
                    <relationship-role-source>
                        <description>yhdjb</description>
                        <ejb-name>Yhdjb</ejb-name>
                    </relationship-role-source>
                    <cmr-field>
                        <description>czqxb</description>
                        <cmr-field-name>czqxb</cmr-field-name>
                        <cmr-field-type>java.util.Collection</cmr-field-type>
                    </cmr-field>
                </ejb-relationship-role>
                <ejb-relationship-role>
                    <description>czqxb</description>
                    <ejb-relationship-role-name>CzqxbRelationshipRole</ejb-relationship-role-name>
                    <multiplicity>Many</multiplicity>
                    <cascade-delete />
                    <relationship-role-source>
                        <description>czqxb</description>
                        <ejb-name>Czqxb</ejb-name>
                    </relationship-role-source>
                </ejb-relationship-role>
            </ejb-relation>
        </relationships>
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>Yhdjb</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
            <container-transaction>
                <method>
                    <ejb-name>Czqxb</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
        </assembly-descriptor>
    </ejb-jar>
      

  2.   

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE weblogic-rdbms-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 7.0.0 EJB RDBMS Persistence//EN' 'http://www.bea.com/servers/wls700/dtd/weblogic-rdbms20-persistence-700.dtd'>
    <weblogic-rdbms-jar>
        <weblogic-rdbms-bean>
            <ejb-name>Yhdjb</ejb-name>
            <data-source-name>xtyhDataSource</data-source-name>
            <table-map>
                <table-name>YHDJB</table-name>
                <field-map>
                    <cmp-field>yhdm</cmp-field>
                    <dbms-column>YHDM</dbms-column>
                </field-map>
                <field-map>
                    <cmp-field>yhm</cmp-field>
                    <dbms-column>YHM</dbms-column>
                </field-map>
            </table-map>
        </weblogic-rdbms-bean>
        <weblogic-rdbms-bean>
            <ejb-name>Czqxb</ejb-name>
            <data-source-name>xtyhDataSource</data-source-name>
            <table-map>
                <table-name>CZQXB</table-name>
                <field-map>
                    <cmp-field>yhdm</cmp-field>
                    <dbms-column>YHDM</dbms-column>
                </field-map>
                <field-map>
                    <cmp-field>gnh</cmp-field>
                    <dbms-column>GNH</dbms-column>
                </field-map>
                <<field-map>
                    <cmp-field>zt</cmp-field>
                    <dbms-column>ZT</dbms-column>
                </field-map>
                <field-map>
                    <cmp-field>xs</cmp-field>
                    <dbms-column>XS</dbms-column>
                </field-map>
            </table-map>
        </weblogic-rdbms-bean>
        <weblogic-rdbms-relation>
            <relation-name>yhdjb-czqxb</relation-name>
            <weblogic-relationship-role>
                <relationship-role-name>CzqxbRelationshipRole</relationship-role-name>
                <relationship-role-map>
                    <foreign-key-table>CZQXB</foreign-key-table>
                    <primary-key-table>YHDJB</primary-key-table>
                    <column-map>
                        <foreign-key-column>YHDM</foreign-key-column>
                        <key-column>YHDM</key-column>
                    </column-map>
                </relationship-role-map>
            </weblogic-relationship-role>
        </weblogic-rdbms-relation>
    </weblogic-rdbms-jar>
      

  3.   

    package com.gdc.ejb.xtyh;import javax.ejb.*;
    import java.util.Collection;abstract public class YhdjbBean implements EntityBean {
      EntityContext entityContext;
      public java.lang.String ejbCreate(java.lang.String yhdm) throws CreateException {
        setYhdm(yhdm);
        return null;
      }
      public void ejbPostCreate(java.lang.String yhdm) throws CreateException {
        /**@todo Complete this method*/
      }
      public void ejbRemove() throws RemoveException {
        /**@todo Complete this method*/
      }
      public abstract void setYhdm(java.lang.String yhdm);
      public abstract void setYhm(java.lang.String yhm);
      public abstract void setCzqxb(java.util.Collection czqxb);
      public abstract java.lang.String getYhdm();
      public abstract java.lang.String getYhm(); 
      public abstract java.util.Collection getCzqxb();
      public void ejbLoad() {
        /**@todo Complete this method*/
      }
      public void ejbStore() {
        /**@todo Complete this method*/
      }
      public void ejbActivate() {
        /**@todo Complete this method*/
      }
      public void ejbPassivate() {
        /**@todo Complete this method*/
      }
      public void unsetEntityContext() {
        this.entityContext = null;
      }
      public void setEntityContext(EntityContext entityContext) {
        this.entityContext = entityContext;
      }
    }
      

  4.   

    你的问题我估计是出在YHDM字段上,既然你把YHDM字段作为了关系字段,你就不应该在Yhdjb还有对应的get和set方法了
      

  5.   

    那是不是要把ejbCreate中的setYhdm(yhdm);和public abstract void setYhdm(java.lang.String yhdm); 和
    public abstract java.lang.String getYhdm();都去掉?那这样的话home.create不是就不行了吗,而且也得不到yhdm这个字段的值了错误提示怎么不是这样呢?迷惑中
      

  6.   

    如果YHDM是主键应该搞成自增长的
      

  7.   

    在weblogic-rdbms-jar.xml文件中
    <automatic-key-generation>            <generator-type>NAMED_SEQUENCE_TABLE</generator-type>            <generator-name>sequence_table</generator-name>            <key-cache-size>10</key-cache-size></automatic-key-generation>用序列表来实现其中sequence_table为:create table sequence {   sequence int not null //这个字段明必须为sequence int not null}
      

  8.   

    是不是要在数据库中新建一个表sequence ?然后再在weblogic-rdbms-jar.xml文件中加上下面这些?<automatic-key-generation>            <generator-type>NAMED_SEQUENCE_TABLE</generator-type>            <generator-name>sequence_table</generator-name>            <key-cache-size>10</key-cache-size></automatic-key-generation>什么用意呢?
      

  9.   

    对就是这个意思,也可以jbuilder来做
      

  10.   

    jbuilder里面做的话是怎么搞?如果在jbuilder的话可能还能司出点什么来,不然的话就算做出来也还是蒙查查
      

  11.   

    突然想到你前面说“如果YHDM是主键应该搞成自增长的”,现在要建的系列不是用来生成yhdm的吧,要知道那是个字符型字段啊,会不会有影响?
      

  12.   

    ejb呀?你发短信给zez让他帮你看看,呵呵
      

  13.   

    仔细看了你的配置文件,发现一个问题:你的两个表的YHDM都是主键,你怎么能用他们来建立relationship呢?因为如果是primary key,ejb里面就不允许它有setXXX()方法,只允许有getXXX(),但是如果它是一个cmr-field,也就是relation的一端,就必须有setXXX()和getXXX()方法.重新修改一下你的表的定义吧。
      

  14.   

    asdmonster(努力学习VC,讨回失去的信誉分),我觉得你说的有道理,如果两边都是主键的话就不能建立关系,但从数据库角度来说是可以的,可能ejb有点与众不同。先不谈这个吧,那么如果yhdm只在yhdjb,也就是one端是主键而many端不是主键的话应该没有问题是不是?数据库结构不是我说改就能改的,看来我不能再用realtion了,在第一个表中查出了yhdm,然后用它在第二个表里面查出所有yhdm等于它的记录就行了,再问一下这种手动的方法与relation比起来效率会不会差很远呢?
      

  15.   

    从错误的信息提示看,你一个bean中的cmr字段定义有误,规范上这个字段必须同时有get/set方法,另外有可能你的get/set方法传递的参数也有问题。
      

  16.   

    我赞同 asdmonster(努力学习VC,讨回失去的信誉分)  的说法,现在谁能回答我上面的最后一个问题:“数据库结构不是我说改就能改的,看来我不能再用realtion了,在第一个表中查出了yhdm,然后用它在第二个表里面查出所有yhdm等于它的记录就行了,再问一下这种手动的方法与relation比起来效率会不会差很远呢?
    ”没有人回答的话,下午结贴
      

  17.   

    数据库结构不是我说改就能改的,看来我不能再用realtion了,在第一个表中查出了yhdm,然后用它在第二个表里面查出所有yhdm等于它的记录就行了,再问一下这种手动的方法与relation比起来效率会不会差很远呢?----
    为什么不在一个SQL语句里面做两个表的联查???
    这样效率要高的多
      

  18.   

    为什么不在一个SQL语句里面做两个表的联查???
    这样效率要高的多
    能说清楚一些吗?在EJB中怎么样实现,那是不是一个bean中要有两个表?
      

  19.   

    如果是BMP或者是SESSION BEAN,完全可以将需要表的字段查出来放到一个VO里面啊,当然这样看你具体的业务需求。
    CMP ENTITYBEAN就没法了。
      

  20.   

    我就是用的CMP,结贴了,谢谢大家