Hibernate替换字符串条件

时间:2014-06-26 21:49:18

标签: java oracle hibernate jpa orm

我在创建查询时遇到了一些麻烦,其中必要的条件是在我需要替换特殊字符的字段中使用like。像这样:

public List<MyClass> search(Myclass object){

Criteria cri = criteria(MyClass.class);
if(object.getName() != null){
    cri.add(Restrictions.sqlRestriction("replace("+cri.getAlias()+".name,"+object.getSpecialCharacter()+", '') like '"+object.getName()+"'"));  
}
if(dominio.getType()!= null){
    cri.add(Restrictions.eq("type", object.getType()));
}
if(dominio.getWorkspace() != null){
    cri.add(Restrictions.eq("workspace", object.getWorkspace()));
}
if(dominio.getStatus() != null){
cri.add(Restrictions.eq("status", object.getStatus()));
}

return cri.list();

}

使用此代码,我收到以下错误:

this_.ID_MYCLASS as ID_MYCLASS1_33_0_,
this_.NM_MYCLASS as NM_MYCLASS4_33_0_,
this_.ID_STATUS as ID_STATU5_33_0_,
this_.ID_TYPE as ID_TYPE_7_33_0_,
this_.ID_WORKSPACE as ID_WORKS8_33_0_ 
from KDTB_MYCLASS this_ 
where replace(this.name,'_', '') like 'COD' 
and this_.ID_WORKSPACE=?

ORA-00904:&#34; THIS&#34;。&#34; NAME&#34;:无效标识符

我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

请改为尝试:

cri.add(Restrictions.sqlRestriction("replace({alias}.name,"+object.getSpecialCharacter()+", '') like '"+object.getName()+"'"));

答案 1 :(得分:0)

您可以尝试将其作为sqlRestriction的第一个参数:

 "replace("+cri.getAlias()+"_.name,"

最后,您指出HQL不支持替换例程。如果你遇到更多麻烦,可以考虑放弃Criteria&amp;为此使用本机SQL查询。