CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

用findByPrimaryKey返回的对象的getXXX方法得到的都是null

楼主alpha_Ouyang(oyq)2003-08-01 17:51:19 在 Java / J2EE / EJB / JMS 提问

我在Jboss+Mysql+Win2k下开发,我每次用findByPrimaryKey得到的对象的getXXX方法都是空,而Mysql中肯定是有数据的.而且我通过在在服务器窗口打印调试信息发现,每次调用findByPrimaryKey后在调用getXXX方法时,bmp没有持续化,因为setEntityContext被调用了. 问题点数:100、回复次数:23Top

1 楼alpha_Ouyang(oyq)回复于 2003-08-02 12:54:27 得分 0

up  
  Top

2 楼alpha_Ouyang(oyq)回复于 2003-08-02 16:02:54 得分 0

有没有人知道啊  
  Top

3 楼alpha_Ouyang(oyq)回复于 2003-08-02 19:47:04 得分 0

upTop

4 楼Sundery(我是个瓶子~)回复于 2003-08-02 19:53:05 得分 10

想想,帮你顶:DTop

5 楼wyzh(wyzh)回复于 2003-08-02 23:09:39 得分 10

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

6 楼alpha_Ouyang(oyq)回复于 2003-08-03 12:21:09 得分 0

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

7 楼hessian(Tidus)回复于 2003-08-03 12:43:01 得分 10

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

8 楼hessian(Tidus)回复于 2003-08-03 12:51:51 得分 10

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

9 楼alpha_Ouyang(oyq)回复于 2003-08-03 13:58:05 得分 0

ejbLoad中给数据赋过值了  
  Top

10 楼yfh0919(梦白)回复于 2003-08-03 14:15:21 得分 10

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

11 楼alpha_Ouyang(oyq)回复于 2003-08-04 09:11:07 得分 0

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

12 楼alpha_Ouyang(oyq)回复于 2003-08-04 09:36:55 得分 0

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

13 楼zhouyiqing(玉樹臨風)回复于 2003-08-04 10:00:03 得分 10

假如程序沒有問題,可以檢查一下你的配置文件是否正確!!Top

14 楼alpha_Ouyang(oyq)回复于 2003-08-04 10:05:44 得分 0

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>Top

15 楼alpha_Ouyang(oyq)回复于 2003-08-04 10:23:12 得分 0

有没有人指点一下啊.  
  Top

16 楼zhouyiqing(玉樹臨風)回复于 2003-08-04 11:50:57 得分 10

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

17 楼alpha_Ouyang(oyq)回复于 2003-08-04 12:46:25 得分 0

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

18 楼xudaorong(努力学习C++)回复于 2003-08-04 13:36:09 得分 10

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

19 楼alpha_Ouyang(oyq)回复于 2003-08-04 13:55:41 得分 0

代码太长了.只贴一部分.  
   
  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);  
  }  
            }  
  //其余的省略  
  ......  
  }  
   
  Top

20 楼xudaorong(努力学习C++)回复于 2003-08-05 10:47:57 得分 20

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

21 楼alpha_Ouyang(oyq)回复于 2003-08-05 12:56:42 得分 0

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

22 楼alpha_Ouyang(oyq)回复于 2003-08-05 12:59:53 得分 0

好散分了,大家都给点Top

23 楼alpha_Ouyang(oyq)回复于 2003-08-05 12:59:57 得分 0

好散分了,大家都给点Top

相关问题

  • 不再用到的对象要置成null,请举个例子
  • 再提一个关于对象和null比较的问题
  • 在vc中如何返回一个null,如何判断某个对象的值为null啊
  • ADODB.Recordset对象怎么样才能把一个字段的值更新为NULL?
  • 用request.setAttribute()方法传递对象,取的时候是null,怎么回事?
  • 帮忙看一下,为什么我得到的是null Document对象?
  • this==NULL???
  • C++原理性质的问题,为什么将NULL赋值给对象指针不new这个对象,却还能能调用方法,为什么呢?
  • [急啊] 如何判断javascript中变量值为null,对象或变量是否为undefined?
  • 帮忙看看这段代码,为什么servlet中取得的Connection对象为null

关键词

  • 数据
  • ps
  • null
  • findbyprimarykey
  • 调用
  • ejbcontext
  • getxxx
  • toolid
  • setentitycontext
  • ejbload

得分解答快速导航

  • 帖主:alpha_Ouyang
  • Sundery
  • wyzh
  • hessian
  • hessian
  • yfh0919
  • zhouyiqing
  • zhouyiqing
  • xudaorong
  • xudaorong

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo