【问题标题】:Hibernate replace string conditionHibernate 替换字符串条件
【发布时间】:2014-08-17 21:56:30
【问题描述】:

我在创建查询时遇到了一些麻烦,其中必要条件是在需要替换特殊字符的字段中使用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: "THIS"."NAME": 标识符无效

我做错了什么?

提前致谢!

【问题讨论】:

  • this.name 是一个表列,您要删除其值上的“_”吗?
  • “_”只是一个例子。特殊字符可以变化。

标签: java oracle hibernate jpa orm


【解决方案1】:

试试这个:

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

【讨论】:

  • 它找到了表的别名,但我仍然遇到属性“name”的问题,Hibernate 现在正在生成以下查询:
  • 我需要知道属性“name”的别名。我怎样才能发现它的别名? ORA-00904: "THIS_"."NAME": 标识符无效。
【解决方案2】:

你可以试试这个作为sqlRestriction的第一个参数:

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

最终,您指出 HQL 不支持替换例程。如果您遇到更多问题,请考虑放弃 Criteria 并为此使用本机 SQL 查询。

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 2014-03-13
    • 2015-02-02
    • 1970-01-01
    • 2011-10-03
    • 2012-06-12
    • 2021-10-19
    • 2013-11-19
    相关资源
    最近更新 更多