Hibernate查询语言就像运算符不起作用

时间:2015-04-17 06:38:25

标签: java hql

cmTDsquery = createQuery("from CmTxnDetailStage cstg where cstg.statusCd=:err" +
                    " and (cstg.id.batchName like :batchname or cstg.id.batchName like :batchname1)"+
                    " and cstg.prodTypeBlfd like :search1 "+
                    " and trunc(cstg.tranUploadDttm)=:uploadDt");
cmTDsquery.bindStringProperty("search1", CmTxnDetailStage.properties.prodTypeBlfd, search);

我将搜索参数声明为

search = "MON%";

如果我将:search1替换为'MON%',它可以正常运行并且查询返回结果。

只有上面的代码不起作用并返回NULL

谢谢

----------------编辑1

cmTDsquery.bindStringProperty("batchname",CmTxnDetailStage.properties.batchName,batchNamePattern);
            cmTDsquery.bindStringProperty("batchname1",CmTxnDetailStage.properties.batchName,batchNamePattern1);

很抱歉提及这一点,但上面的bindStringProperty方法就像魅力一样。 batchname和batchname1包含“CR_STLM_UBROL%”和“%RMB_PINDBT%”。

3 个答案:

答案 0 :(得分:2)

设置参数

时这样做

"%&#34 + +搜索"%"

答案 1 :(得分:0)

我无法完全理解这一行

cmTDsquery.bindStringProperty("search1",    CmTxnDetailStage.properties.prodTypeBlfd, search);

您是否设置了正确的值 - " MON%"而不是例如" MON"? 我使用过像Query.setParameter这样的HQL(" search1"," MON%")它和类似运算符一样好用。

答案 2 :(得分:0)

我的代码几乎相同:

whereClause = whereClause + (whereClause.length() > 0 ? "AND " : "") + "ac.name LIKE :name ";

进一步在我的代码中:

if (searchCriteria.getNameSearchOperator() == SQL_STRING_SEARCH_OPERATORS.CONTAINS) {
    value = "%" + value + "%";
}
if (searchCriteria.getNameSearchOperator() == SQL_STRING_SEARCH_OPERATORS.START_WITH) {
    value = value + "%";
}
query.setParameter("name", value);

尝试使用setParameter代替bindStringProperty