#java #oracle #hibernate #jpa #orm
#java #Oracle #спящий режим #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: «ЭТО».»ИМЯ»: недопустимый идентификатор
Что я делаю не так?
Заранее спасибо!
Комментарии:
1. this.name это столбец таблицы, и вы хотите удалить «_» в его значении?
2. «_» — это просто пример. Специальный символ может меняться.
Ответ №1:
Попробуйте это вместо:
cri.add(Restrictions.sqlRestriction("replace({alias}.name," object.getSpecialCharacter() ", '') like '" object.getName() "'"));
Комментарии:
1. Это сработало, чтобы найти псевдоним таблицы, но у меня все еще возникают проблемы с атрибутом «name», Hibernate сейчас генерирует следующий запрос:
2. Мне нужно знать псевдоним атрибута «name». Как я могу определить его псевдоним? ORA-00904: «THIS_».»NAME»: недопустимый идентификатор.
Ответ №2:
Вы могли бы попробовать это в качестве первого параметра sqlRestriction
:
"replace(" cri.getAlias() "_.name,"
В конечном счете, вы указываете, что HQL не поддерживает процедуру замены. Если у вас возникли дополнительные проблемы, рассмотрите возможность отказа от критериев и используйте для этого собственный SQL-запрос.