public static List borrowBook(String bookname) { Query query = HibernateSessionFactory.getSession().createQuery(
"from Book where bookname like :bkname"); query.setString("bkname", "%"+bookname+"%"); List list = query.list(); System.out.println(list.size());

return list;
}
和public static List borrowBook(String bookname) {                  Query query = HibernateSessionFactory.getSession().createQuery(
                  "from Book where bookname like ?");                  query.setString(0, "%"+ bookname + "%"); List list = query.list(); System.out.println(list.size());

return list;
}上面两种形式我都试过了,但是输出list.size()的值都是0,是不是模糊查询的时候,查询语句有问题啊,再次请教帅哥美女帮忙解决一下。

解决方案 »

  1.   

    Hibernate: select book0_.book_id as book1_1_, book0_.bookname as bookname1_, book0_.author as author1_, book0_.publisher as publisher1_, book0_.image as image1_, book0_.introduce as introduce1_, book0_.isbn as isbn1_, book0_.amount as amount1_, book0_.price as price1_, book0_.bt_id as bt10_1_ from scott.Book book0_ where book0_.bookname like ?
      

  2.   

    Query query = HibernateSessionFactory.getSession().createQuery(
      "from Book where bookname like ?");  query.setString(0, "%"+ bookname + "%");LZ这一应该是 1 好像不是 0 吧
      

  3.   

    事实上list.size()的值就是0。
             我不知道那个环节出错了。
      

  4.   

    是否是中文问题啊,测试一下like 英文字符 是否有效。
      

  5.   

    直接写 String sql = "from ClientInfo as a where a.client_name like ''%"+ clientname+"%''");  Query repeatClientQuery=querysession.createQuery(sql); 成功.  但是却不能查询中文,假如clientname是客户1名字的话,那么将查不到结构,解决办法:  1.用占位符:                    Query query = session                         .createQuery("select count(*) from Privilege p where p.name like ?");                 query.setString(0, "%" + name + "%");  // 注意这里不能写成setString(0," ''%" + name + "%'' ";否则查不出来结果,不能加‘单引号  2.修改查询编译器:  Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,  hibernate.query.factory_class属性用来选择查询翻译器。 (1)选择Hibernate3.0的查询翻译器: hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory (2)选择Hibernate2.1的查询翻译器 hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory 为了使用3.0的批量更新和删除功能,只能选择(1)否则不能解释批量更新的语句,当使用的时候出现了不支持条件输入中文的情况。  选择(2)可以支持输入中文,但没法解释批量更新语句了摘自http://www.sunxin.org/forum/thread/22856.html;jsessionid=B7F82C3A04C8FAAD306082B20ABC6F51
      

  6.   

    LZ 你是做 模糊查询是吗?
    建议你用Criteria,它在模糊查询这方面比较方便
    日期比较也很方便的
    eg:
    Criteria criteria = this.getSession(true).createCriteria( 实体类.class);
    if (参数!= null)
    criteria.add(Expression.like("字段", 参数));  
    return criteria.list();
      

  7.   

    直接写 String sql = "from ClientInfo as a where a.client_name like ''%"+ clientname+"%''"); Query repeatClientQuery=querysession.createQuery(sql);出错了。javax.servlet.ServletException: unexpected char: '%' [from Entity.Book as b where b.bookname like ''%hibernate%'']而且不是中文问题。
      

  8.   

    query.setString("bkname", "%"+bookname+"%");
    这个写成单引号就可以了:
    query.setString("bkname", ('%'+bookname+'%'));