日期:2014-05-20  浏览次数:20865 次

hibernate 根据占位符设值
请看:
sqlstr.append(" and p.product_Name like '%:productName%'");

Query countQuery = session.createSQLQuery(sqlstr.toString());
query.setString("productName", pq.getProductName());

 是根据productName名去设置值;为啥不行?

------解决方案--------------------
and p.product_Name like :productName这样行不行啊
------解决方案--------------------
Java code

    public String searchByKey(){
        if(key!=null && type!=null && key.length()>0 && type.length()>0){
            condition="where b.type=? and b.title like ?";
            allBook= bookService.search(condition,type,"%"+key+"%");
        }
    }
    public List<Book> search(String condition, String type, String key) {
        Session session = this.getSession();
        List list=session.createQuery("from Book b "+condition).setString(0, type).setString(1, "%"+key+"%").list();
        session.close();
        return list;
    }

------解决方案--------------------
sqlstr.append(" and p.product_Name like '%':productName'%'");
不知道这样行不行。

不过用Hibernate还真没有像楼主这样搞过。
------解决方案--------------------
and p.product_Name like :productName


query.setString("productName","%"+pq.getProductName()+"%");
------解决方案--------------------
探讨

5楼的做法是错误的;4,6楼的做法一样的;因为我这用的是hibernate中的 query.setProperties(pageRequest);

setProperties 方法是根据类的属性去设值的,所以你们的想法还是没能解决我的问题,我在想hibernate中有没有指定like查询的设值方法呢

------解决方案--------------------
你的写法不对啊 。。。。。。。。。。。。。。。。。。。
应该是:
sqlStr.append(" and p.product_Name like :productName");
Query countQuery = session.createSQLQuery(sqlstr.toString());
query.setString("productName", "%"+pq.getProductName()+"%");

探讨
请看:
sqlstr.append(" and p.product_Name like '%:productName%'");

Query countQuery = session.createSQLQuery(sqlstr.toString());
query.setString("productName", pq.getProductName());

是根据productNa……

------解决方案--------------------
逆向思维哦~~
sqlStr.append(" and p.product_Name like :productName");
Query countQuery = session.createSQLQuery(sqlstr.toString());
query.setString("productName", "%"+pq.getProductName()+"%");