你看一看findByPrimaryKey返回的对象是不是null

解决方案 »

  1.   

    to wyzh(wyzh):
    返回的对象不是null
      

  2.   

    你用的是BMP?把代码贴出来看看.
      

  3.   

    看看是否在ejbLoad函数中给数据域赋值.
      

  4.   

    你的ejbCreate方法创建的数据(对象)是不是在内存中存在,把它作为你bean里面的字段保存下来,然后就可以用get方法得到 你想要的数据了
      

  5.   

    我在调用myhome.create之后,用getXXX方法可以得到数据,而用myhome.findByPrimaryKey之后,用getXXX方法得到的都是null,而且我发现在调用findByPrimaryKey之后,系统自动又调用了一次setEntityContext,由此看来,该bmp重新被实例化了.
      

  6.   

    我又发现,我用findByPrimaryKey可以找到create产生的数据,即使在数据库修改了,findByPrimaryKey找到的仍是原来的数据.而且这时候调用findByPrimaryKey时,系统没有调用ejbFindByPrimaryKey方法,只调用setEntityContext.真奇怪.
      

  7.   

    to:zhouyiqing
    看哪里啊.拜托帮看一下
    jboss.xml
    <jboss>
        <enterprise-beans>
            <entity>
                <ejb-name>personBean0</ejb-name>
                <jndi-name>personBean0</jndi-name>
                <resource-ref>
                    <res-ref-name>java:/MySqlDS</res-ref-name>
                    <jndi-name>java:/MySqlDS</jndi-name>
                </resource-ref>
            </entity>
        </enterprise-beans>
    </jboss>ejb-jar.xml
    <ejb-jar>
        <enterprise-beans>
            <entity>
                <ejb-name>personBean0</ejb-name>
                <home>PersonHome</home>
                <remote>Person</remote>
                <ejb-class>PersonBean</ejb-class>
                <persistence-type>Bean</persistence-type>
                <prim-key-class>java.lang.String</prim-key-class>
                <reentrant>False</reentrant>
                <resource-ref>
                    <description />
                    <res-ref-name>java:/MySqlDS</res-ref-name>
                    <res-type>javax.sql.DataSource</res-type>
                    <res-auth>Container</res-auth>
                </resource-ref>
            </entity>
        </enterprise-beans>
        <assembly-descriptor />
    </ejb-jar>
      

  8.   

    你有沒有寫主健類?
    <prim-key-class>java.lang.String</prim-key-class>
      

  9.   

    我在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找,就行了.
    ejbContext是私有变量,在setEntityContext中把参数赋给它.
    但是,我在网上看到很多例子里,都没有在ejbLoad()用ejbContext.getPrimaryKey(),而是直接用
    作为主键的私有变量进行查询的
      

  10.   

    在实现类中定义getPrimaryKey()方法体时,其类型要为主键类。你在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找应该是正确的。
    你最好把源码贴出来。
      

  11.   

    代码太长了.只贴一部分.ToolBean.java//import 部分省略
    public class ToolBean implements EntityBean
    {
       private String toolID,description;
       private int weight;
       private EntityContext ejbContext;
       private Connection con;
       private String dbName ="java:/MySqlDS";
       private InitialContext ic = null;
       private PreparedStatement ps = null;
       private Statement s = null;
       public void setEntityContext(EntityContext cntx)
       {
         ejbContext = cntx;
         try
    {
       makeConnection();//连接数据库用的,给con赋值
    }
          catch (Exception ex)
          {
           throw new EJBException("Unable to connect to database. " +ex);
          }
        }
        public String ejbFindByPrimaryKey(String primaryKey)
    throws FinderException
          {
    try
    {
                ps = con.prepareStatement(
      "SELECT toolID FROM Tool WHERE toolID = ? ");
      ps.setString(1, primaryKey);
      ResultSet rs = ps.executeQuery();
      if(rs.next())
      {
        toolID = primaryKey;
      }
      else
      {
        System.out.println("Find Error");
       }
    }
    catch (SQLException ex)
    {
      throw new EJBException("Exception in ejbFindByPrimaryKey:"+ex);
    }
    try
    {
      ps.close();
    }
    catch(Exception e)
    {
                System.out.println("Cannt close statement:"+e);
    }
    return toolID;
          }      public void ejbLoad()
          {
            try
            {
                this.toolID =(String)ejbContext.getPrimaryKey();//加上这一句就行了
                ps = con.prepareStatement("SELECT * FROM Tool WHERE toolID = ?");
           ps.setString(1, this.toolID);
       ResultSet rs = ps.executeQuery();
       if(rs.next())
       {
          this.toolID=rs.getString(1);
               this.description=rs.getString(2);
          this.weight=rs.getInt(3);
       }
       else
       {
          System.out.println("Load Error");
       }
    }
    catch (SQLException  ex)
    {
          throw new EJBException("Exception in ejbLoad:"+ex);
    }
    try
    {
      ps.close();
    }
    catch(Exception e)
    {
        System.out.println("Cannt close statement:"+e);
    }
         }
    //其余的省略
    ......
    }
      

  12.   

    用JSP调用业务方法,然后单步执行,看看return toolID是否为空。
      

  13.   

    to:xudaorong(道道道)
    我已经解决了.我在ejbLoad()中用ejbContext.getPrimaryKey()返回primaryKey再查找,就行了