我在做ssh开发的时候遇到个问题,利用hibernate中的query语句查询mysql数据库的值,返回list。
但是,如果数据库中没有符合的值的话,返回的值是什么
 customers = this.getSession().createQuery("from Customer c where c.id_number=id_number")
.list();

if(customers!=null)
{
for(Iterator iter = customers.iterator();iter.hasNext();)
{
Customer customer = (Customer) iter.next();
if(customer!=null)
{

System.out.println(flag);
return customer;

}
}
}我用这个程序测试了下,感觉返回的值不是null值,所以想问下,如何判断query的返回值呢
还有个问题,我查询的时候,返回的总是list,如果我查询的值只有一个对象的,我还要把他放入list中,然后迭代出来,感觉很麻烦,有没有直接查询出来,放入一个object中呢????

解决方案 »

  1.   

    不是null,你得用list.size()是否为0来判断
      

  2.   

    hibernate自身就有返回object的方法,find(class,id)就可以返回一个object。
      

  3.   

    find()是2.X里面的方法吧?Hibernate的查询返回就是Objecct,对于单个实体的查询,问了更加对象化
    可以返回Student如果hql是这样:select c.name,s.name from Classes c ,Student s我知道的就是只能返回Object[]
    Object[] obj= (Object[]) iter.next(); 
    System.out.println("c.name:"+obj[0]);
    System.out.println("s.name:"+obj[1]);
      

  4.   

    返回还是List对象,不过list.size()==0
    如果你是想要通过id得到一个对象的最好办法,就是不要写hql语句,用session高速缓存
    session.get()或者session.load()来拿到object。
    这样管理更方便
      

  5.   

    也可指定List中的泛型,返回的就不是Object了
    eg:List<Customer> testList=...
      

  6.   

    使用uniqueResult() 方法,返回一个对象
      

  7.   


    hibernate 除了返回Object[]外, 可以返回实体的
    比如只要两个属性:
    select new Classes(id,name) from Classes  这样就返回的是实体对象了,但必须在实体对象中定义对应的构造方法和不带参数的构造方法,否则会报错