用findByPrimaryKey返回的对象的getXXX方法得到的都是null
我在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



