List<User> list = (List<User>)this.getHibernateTemplate().find("from User u where u.userName=?",user.getUserName()); System.out.println(list != null);
System.out.println(list.size() > 0);
System.out.println(list.get(0));结果是System.out.println(list != null);    结果是true;
      System.out.println(list.size() > 0);  结果是1
      System.out.println(list.get(0));      结果是null
     请问一下,为什么 (list != null)是ture,(list.size() > 0是1)但是 list.get(0)取出来却是null的?

解决方案 »

  1.   

    User uu=(User)list.get(0); 
    System.out.println(user.getUserName());
    试试
      

  2.   

    把日志打开看看,看看sql语句的执行情况,吧hibernate转化的sql语句和结果集看看
      

  3.   

    list.get(0)取出的是一个Object对象,需要强制转换成所需要的类型,比如你的User类型,你这样输出为null只能说明对象本身为null。。可以按楼上说的试试
      

  4.   

    System.out.println(user.getUserName());于User uu=(User)list.get(0);没关系的吧。。
      

  5.   

    但是为什么System.out.println(list != null); 结果是true;??
      

  6.   


    这是是true很正常System.out.println(list.size() > 0); 结果是1
    只是这个结果是1 就不正常了
      

  7.   


    是true只能证明list对象本身不对空,第二个打印结果为1证明list中存有东西,第三个打印结果才证明list中存的对象是否为空
      

  8.   


    难道你不觉得第二个答应结果也应该是  true或者false么。
    怎么会打印出 1 来呢
      

  9.   


    我以为打印的是list.size() ,刚才看到打印的是list.size()>0?很奇怪。
    楼主,是不是贴错了?
      

  10.   

    这有什么奇怪的吗,list里本来就可以放null的List l=new ArrayList();
    l.add(null);
    System.out.println(l.get(0));
      

  11.   

    没有>0的,就是 System.out.println(list.size() ); 结果是1
      

  12.   

    我觉得这个问题 应该是hibernate的问题 你数据库没有主键吧?如果你数据库里有某列为空的话 就会导致整个对象为null 所以就出现了你说的那种现象。你可以把那列空值赋值看看 就可以验证是否是这么回事了。
      

  13.   

    是true只能证明list对象本身不对空??什么意思啊?
      

  14.   

    debug一下,看list里面到底是个什么东西
      

  15.   

    说不定存进去的是"null"字符串
    list.get(0)就取出这个"null"字符串来了
      

  16.   

    数据库里是不是没值啊!new list本身就不为空!list.size也就大于0!
      

  17.   

    我总结有两种可能:
    1,也是可能性比较大的,就是list中有东西,但是list的第一个元素是null(java.util.List是可以存null的);
    2,你的User的toString()方法被重写过