Java 休眠替换字符串条件

Java 休眠替换字符串条件,java,oracle,hibernate,jpa,orm,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,"

我在创建一个查询时遇到了一些问题,其中一个必要条件是在需要替换特殊字符的字段中使用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();

}
ORA-00904:“此”“名称”:无效标识符

我做错了什么


提前谢谢

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

 "replace("+cri.getAlias()+"_.name,"
最后,您指出HQL不支持替换例程。如果您有更多的麻烦,请考虑开沟标准并使用本机SQL查询。
cri.add(Restrictions.sqlRestriction("replace({alias}.name,"+object.getSpecialCharacter()+", '') like '"+object.getName()+"'"));

this.name是一个表列,您想删除其值上的“\u1”?“\u1”只是一个示例。特殊字符可能会有所不同。它可以找到表的别名,但我对属性“name”仍然有问题,Hibernate现在正在生成以下查询:我需要知道属性“name”别名。我如何才能发现它的别名?ORA-00904:“此名称”:无效标识符。
cri.add(Restrictions.sqlRestriction("replace({alias}.name,"+object.getSpecialCharacter()+", '') like '"+object.getName()+"'"));