1、你在ejbPostCreate()中set那个不是主键字段的值呀;

解决方案 »

  1.   

    2、SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password=?1
    应改为:SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password = ?1
    就是在=号前后加了空格,你仔细的观察一下。
      

  2.   

    谢谢楼上的。可是:
    我的表名叫signon,两个字段:username和password,都是String类型,都是NOT NULL
    1. 如果在ejbPostCreate()中set那个不是主键字段的值,那我从哪里传参数进去呀?都只有一个参数的呀,就是username。能不能给我个例子?万分感激
    2.那个空格我加了,可是还是错误:
    "zkytest.ejbgrpx": ERROR: Error from ejbc: Error while reading 'META-INF/weblogic-cmp-rdbms-jar.xml'. The error was:
    "zkytest.ejbgrpx":  
    "zkytest.ejbgrpx": weblogic.ejb20.cmp.rdbms.finders.IllegalExpressionException:
    "zkytest.ejbgrpx": While trying to process Finder
    "zkytest.ejbgrpx": Method Name: findByPassword
    "zkytest.ejbgrpx": Parameter Types: (java.lang.String)
    "zkytest.ejbgrpx": EJB Query: SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password= ?1
    "zkytest.ejbgrpx": )
    "zkytest.ejbgrpx": Could not parse EJB QL expression: SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password= ?1
    "zkytest.ejbgrpx": ERROR: ejbc found errors
    好象一样的错误?
    请再指教!谢谢!
    邮箱:[email protected]
      

  3.   

    我来帮你吧:)
    1. 我用jbuilder8创建了一个CMP的实体bean,但是在Home接口中只有两个方法:
    public interface SignonHome extends javax.ejb.EJBLocalHome {
      public Signon create(String username) throws CreateException;
      public Signon findByPrimaryKey(String username) throws FinderException;
    }
    我想调用create方法,应该是可以插入一条记录的吧?但是我的表有两个字段,而且都是NOT NULL,而这里的create方法只包含了一个主键的参数(username),我调用时,当然只能传一个参数进去,这样,就出错了,说不能插入空值。请教,如何解决?这个问题必须手动修改,就是说,你必须自己修改Home和RemoteHome这2个方法,同时需要注意的事,在Bean文件中的PostCreate方法的参数必须要和上面的Create一致,因此需要有4个修改的地方
      

  4.   

    .我在home接口里面加了个方法:public Collect findByPassword(String password) throws FinderException;,在module里面输入Query:SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password=?1。可是编译是老是出错:"zkytest.ejbgrpx": ERROR: Error from ejbc: Error while reading 'META-INF/weblogic-cmp-rdbms-jar.xml'. The error was:
    "zkytest.ejbgrpx":  
    "zkytest.ejbgrpx": weblogic.ejb20.cmp.rdbms.finders.IllegalExpressionException:
    "zkytest.ejbgrpx": While trying to process Finder
    "zkytest.ejbgrpx": Method Name: findByPassword
    "zkytest.ejbgrpx": Parameter Types: (java.lang.String)
    "zkytest.ejbgrpx": EJB Query: SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password=?1
    "zkytest.ejbgrpx": )
    "zkytest.ejbgrpx": Could not parse EJB QL expression: SELECT OBJECT(a)FROM SignonBean AS a WHERE a.password=?1
    "zkytest.ejbgrpx": ERROR: ejbc found errors
    请问是什么原因?
    这个问题有2种可能的情况(其中也是JB的BUG)
    情况1:如果你在同一个反复多次添加后删除一个CMP会造成weblogic-cmp-rdbms-jar.xml中的数据丢失,这种情况下只有手动才能恢复,要么重做情况2:我怀疑你在输入的时候括号用了中文方式输入,全部必须是英文方式下输入的,你再试试看。还有这里一句:FROM SignonBean AS a 要注意,这个SignonBean不是你数据库中表项的名字,而是应该是你的CMP的名字,必须注意大小写,完全对应
      

  5.   

    楼上的sundery:
        非常感激你,第一个问题如你所述,已经解决了。
        第二个问题我先按你说的情况二重新写了一遍,好象确实是我把中文括号误用了。但是又出现如下错误:
    "zkytest.ejbgrpx": ERROR: Error from ejbc: Error while reading 'META-INF/weblogic-cmp-rdbms-jar.xml'. The error was:
    "zkytest.ejbgrpx":  
    "zkytest.ejbgrpx": weblogic.ejb20.cmp.rdbms.finders.IllegalExpressionException:
    "zkytest.ejbgrpx": While trying to process Finder
    "zkytest.ejbgrpx": Method Name: findByPassword
    "zkytest.ejbgrpx": Parameter Types: (java.lang.String)
    "zkytest.ejbgrpx": EJB Query: SELECT OBJECT(a) FROM SignonBean AS a WHERE a.password=?1
    "zkytest.ejbgrpx": )
    "zkytest.ejbgrpx": Invalid Expression: Could not find an entity EJB for abstract schema name, 'SignonBean', which is declared in a range variable declaration. Check to be sure that an EJB is defined in the ejb-jar.xml descriptor with this abstract schema name.
    "zkytest.ejbgrpx": ERROR: ejbc found errors好象是说找不到实体bean了,我不太明白abstract schema 的含义。请给我解释一下吧!我的ejb-jar.xml文件如下:sessionbean1是我的远程sessionbean的名称
    <?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>
            <session>
                <display-name>sessionbean1</display-name>
                <ejb-name>sessionbean1</ejb-name>
                <home>ejbtest.sessionbean1Home</home>
                <remote>ejbtest.sessionbean1</remote>
                <ejb-class>ejbtest.sessionbean1Bean</ejb-class>
                <session-type>Stateless</session-type>
                <transaction-type>Container</transaction-type>
                <ejb-local-ref>
                    <description />
                    <ejb-ref-name>cmp1</ejb-ref-name>
                    <ejb-ref-type>Entity</ejb-ref-type>
                    <local-home>ejbtest.SignonHome</local-home>
                    <local>ejbtest.Signon</local>
                    <ejb-link>Signon</ejb-link>
                </ejb-local-ref>
            </session>
            <entity>
                <display-name>Signon</display-name>
                <ejb-name>Signon</ejb-name>
                <local-home>ejbtest.SignonHome</local-home>
                <local>ejbtest.Signon</local>
                <ejb-class>ejbtest.SignonBean</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>Signon</abstract-schema-name>
                <cmp-field>
                    <field-name>username</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>password</field-name>
                </cmp-field>
                <primkey-field>username</primkey-field>
                <query>
                    <query-method>
                        <method-name>findByPassword</method-name>
                        <method-params>
                            <method-param>java.lang.String</method-param>
                        </method-params>
                    </query-method>
                    <ejb-ql>SELECT OBJECT(a) FROM SignonBean AS a WHERE a.password=?1</ejb-ql>
                </query>
            </entity>
        </enterprise-beans>
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>sessionbean1</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
            <container-transaction>
                <method>
                    <ejb-name>Signon</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
        </assembly-descriptor>
    </ejb-jar>不知道还有方法解决吗?谢谢!
    另外,即便没有解决,两天之内我会加分给你。真的谢谢!
      

  6.   

    大功告成,已经搞定了。非常感谢sundery,你的帮助实在大。还有另外两位热心帮助我的网友。我现在就散分。值得一提的是:书上误导我了,还是sundery的回答比较管用。再次谢谢·