Hibernate查询LIKE子句,但空格分隔查找前缀和通配符

时间:2018-02-09 21:29:05

标签: java hibernate hql

我有一个Hibernate查询,它有一个前缀可供查找,如下所示:

SELECT ... WHERE PRODUCT_ID LIKE ?

PRODUCT_ID的格式如下:

ABC123 Brown Desk
ABC1 Desk Set
DE84 Bar Stool
83UIK Spoon

目前,准备好的语句值看起来像(假设productId作为参数传递):

productId%

这意味着对于查询过的ID ABC1,它会从上面的列表中返回两个结果:

ABC123 Brown Desk
ABC1 Desk Set

我的问题:如何在查找中包含空格,以便查询针对特定产品,而不仅仅是前缀?

我试过了:

'productId %'

但它根本不会返回任何结果。我怎么能告诉Hibernate我想查找productId[SINGLE SPACE]%

1 个答案:

答案 0 :(得分:1)

尝试使用CONCAT代替'productId %''? %'

SELECT ... WHERE PRODUCT_ID LIKE CONCAT(?, ' %')
//------------------------------------------^^

或者,在将productId发送给查询之前,您最终可以将Query query = session.createQuery("SELECT ... WHERE PRODUCT_ID LIKE ?"); query.setParameter(1, productId + " %"); //---------------------------------^^ 用空格连接起来:

#include <cstdlib>
#include <iostream>
#include <string>
#include <map>

using namespace std;

/*
 * 
 */
class apple{
private:
    int a,b,c,d;
public:
    int foo(){
        return a+b+c+d;
    }
};
class ball{
private:
    map<apple,string> mp;
public:
    void foo2(){
        for(map<apple,string>::iterator it = mp.begin();it!=mp.end();++it){
            cout<<it->first.foo()<<endl;
        }
    }

}
int main(int argc, char** argv) {

    return 0;
}