Hibernate 模糊查询订单ID(ID为数字型)以前根据姓名来模糊查询
criteria.add(Restrictions.like("name", keyword,MatchMode.ANYWHERE));
这是可以的
但是根据ID来模糊查询
criteria.add(Restrictions.like("id", keyword,MatchMode.ANYWHERE)); 
这就不行了  可能行为ID为数字型

不不知道大家有没有办法 谢谢大家

解决方案 »

  1.   

    数字型还可以模糊查询? 呵呵,直接用肯定是不可以。select * from table where ID || '3' like '%3' order by IDID 虽然是数字型,但是可以用这样的方式来做模糊查询。所以 HQL 因该可以做。但是 你用 criteria,估计里面没有这样的方法。
      

  2.   

    参考:public class SshPostB
    {
    private int postId;
    private String postName;
    private String postNo;
    public String getPostNo() {
    return postNo;
    }
    public void setPostNo(String postNo) {
    this.postNo = postNo;
    }
    // private Integer postNo;
    // public Integer getPostNo() {
    // return postNo;
    // }
    // public void setPostNo(Integer postNo) {
    // this.postNo = postNo;
    // }

    public String getPostName() {
    return postName;
    }
    public void setPostName(String postName) {
    this.postName = postName;
    }
    public int getPostId() {
    return postId;
    }
    public void setPostId(int postId) {
    this.postId = postId;
    }


    }
    Criteria c = s.createCriteria(SshPostB.class);
    c.add(Restrictions.sqlRestriction("to_char({alias}.post_Id) like ?","1%",Hibernate.STRING));
    System.out.println(c.list().size());
      

  3.   


    哈哈,Restrictions.sqlRestriction("to_char({alias}.post_Id) ,有转换成 字符的呀。那楼主去试试吧。
      

  4.   

    Restrictions.sqlRestriction("to_char({alias}.post_Id) 
    看看2楼代码
      

  5.   

    2楼的具有通用性吗?to_char不是Oracle特有的函数吗?其他数据库不一定适用
      

  6.   

    public static void main(String[] args){
    Session session=HibernateSessionFactory.getSession();
    Transaction tran=null;
    try{
    tran=session.beginTransaction();
    Criteria criteria = session.createCriteria(TUser.class);
    String keyword="999";//例如关键字为999 在数据库设计的时候 id为int型
    criteria.add(Restrictions.like("id",keyword,MatchMode.ANYWHERE));
    Iterator<TUser> it=criteria.list().iterator();
    while(it.hasNext()){
    TUser user=it.next();
    System.out.println("id==="+user.getId());
    }
    session.flush();
    tran.commit();
    }catch(HibernateException e)
    {
    e.printStackTrace();
    if(tran!=null);
    try{
    tran.rollback();
    }catch(HibernateException e1)
    {
    e1.printStackTrace();
    }
    }
      finally
    {
    HibernateSessionFactory.closeSession();

    }错误如下:
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate: select this_.id as id0_, this_.name as name0_0_, this_.dep_id as dep3_0_0_ from bbs.t_user this_ where this_.id like ?
    Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    at org.hibernate.type.IntegerType.set(IntegerType.java:39)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:62)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:44)
    at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1115)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1177)
    at org.hibernate.loader.Loader.doQuery(Loader.java:390)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
    at org.hibernate.loader.Loader.doList(Loader.java:1593)
    at org.hibernate.loader.Loader.list(Loader.java:1577)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:111)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1322)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300)
    at hibernate.model.Test.main(Test.java:56)
    不知道怎样用 Criteria或Restrictions结合  才能够是数字型ID可以模糊查询?但是用Query q=session.createQuery("from TUser where id like '%999%'"); //可以模糊查询不知道怎样用 Criteria或Restrictions结合  才能够是数字型ID可以模糊查询?谢谢大家
      

  7.   


    如果是MySQL:
    c.add(Restrictions.sqlRestriction("CAST({alias}.id AS CHAR) like ?", "%1%", Hibernate.STRING));
      

  8.   

    Integer keyword=new Integer(999);