public class BaseHibernateDAO { 
public List search(Class cl,Object condition) 

List list=null; 
  try{ 
    list=this.getSession().createCriteria(cl).add(Example.create(condition)).list(); 
  } 
  catch(Exception e) 
  { 
  e.printStackTrace(); 
  }finally 
  { 
  this.closeSession(); 
  } 
  return list; 

              其它方法省略 
} public static void main(String[] args) { 
    Account condition=new Account(); 
    condition.setBalance(100); 
    BaseHibernateDAO bd=new BaseHibernateDAO(); 
    List list=(List)bd.search(Account.class, condition); 
    for(int i=0;i <list.size();i++) 
    { 
        Account a=(Account)list.get(i); 
       System.out.println(a.getId()); 
    } 

上面代码没有错,如果要查询balance>100的要怎么改呢?
不能使用下面的方法
Criteria c=getSession().createCriteria(Table.class);  
c.add(Restrictions.gt("balance",conditon.balance())); 
只能用BaseHibernateDAO 类的search方法

解决方案 »

  1.   

    最习惯的还是自己写hql来查询。方便,灵活性大。
      

  2.   

    BaseHibernateDAO是自己写的还是ide生成的,search方法代码是什么样子的
      

  3.   

    public List search(Class cl,Object condition) 

    List list=null; 
      try{ 
        list=this.getSession().createCriteria(cl).add(Example.create(condition)).list(); 
      } 
      catch(Exception e) 
      { 
      e.printStackTrace(); 
      }finally 
      { 
      this.closeSession(); 
      } 
      return list; 

      

  4.   

    balance>100不能通过你的这个方法实现!!
    Example.create(condition)会根据属性的类型,如果是String就是like,否则就是=