getHibernateTemplate().find(hql)返回值及引用传值问题

//StudentDAO中的方法
public boolean getPoList(String hql, List poList){
boolean result = false;
try{
poList = getHibernateTemplate().find(hql);
result = true;
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}

//StudentService中的方法
public boolean A{
boolean result = false;
 String hql = "FROM Student WHERE isDel='N'";
List poList = new ArrayList();
result = studentDAO.getPoList(hql, poList);
//使用poList的操作省略。。。。。。
return result;
}

debug时在getPoList方法中poList里面有内容,到达方法A时,poList为什么为没有内容(里面全部存放的是null)

4个回答

//StudentDAO中的方法
public boolean getPoList(String hql, List poList){
boolean result = false;
try{
poList = getHibernateTemplate().find(hql);
result = true;
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}
------------------------改成----------------------------
//StudentDAO中的方法
public boolean getPoList(String hql, List poList){
boolean result = false;
List tempPoList=new ArrayList();
try{
tempPoList = getHibernateTemplate().find(hql);

for(int i=0;i<tempPoList.size();i++){
poList.add(tempPoList.get(i));
}
result = true;
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}
=============这样试试=======
貌似使用等号 poList = getHibernateTemplate().find(hql);不行,使用list的add方法。

wxgxy
wxgxy 谢谢了!!!!
大约 5 年之前 回复
wxgxy
wxgxy 回复ligang819350766: 确实是引用改变了,但是引用指的内容为null,应该是方法A运行结束,他的局部变量被gc了,所以引用对应的内容为null吧。。。
大约 5 年之前 回复
ligang819350766
ligang819350766 “如果直接返回一个list列表,可以使用等号=接收返回的list列表呢。。。。。”:那你还使用引用参数传值干什么???
大约 5 年之前 回复
ligang819350766
ligang819350766 回复wxgxy: 因为他是引用类型嘛,参数poList是一个引用,没调用getPoList方法前他所指的值是null,而你在调用方法getPoList方法时,使用的是=号,意思是把引用改变了(也就是没有改变poList引用所指向的值)。所以调用之后还是null。而add方法,他是改变poList引用所代表的值发生改变了。不知道你明白没?
大约 5 年之前 回复
wxgxy
wxgxy 但是这是为什么呢, 如果直接返回一个list列表,可以使用等号=接收返回的list列表呢。。。。。
大约 5 年之前 回复
  1. 你是从A方法到的StudentDAO对应的方法,在A方法中你把断点设在return那一行,执行了StudentDAO在看看有没有数据
  2. 他的运行应该是 先从A一步一步往下走result = studentDAO.getPoList(hql, poList);到了这一步这个集合依然是空的 只有执行了 走到下一步这个集合如果从studentDAO得到了检索出来的数据那么这个集合才会有数据。否则也是空
wxgxy
wxgxy 我刚才看了一下,断点打到A方法的return处,poList的内容还是null
大约 5 年之前 回复

我刚才看了一下,断点打到A方法的return处,poList的内容还是null

去看下JAVA的形参传递方式吧!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问