Я использую CriteriaBuilder для создания запроса, который возвращает список MyOwnEntitiy.В моей сущности у меня есть @Id типа Long, но мне нужно запросить сущность, когда id похож на «% 3%».В простом sql у меня есть несколько вариантов:
select * from MyOwnTable where concat(id,id) like '%3'
select * from MyOwnTable where id::text like '%3'
select * from MyOwnTable where cast(id as text) like '%3'
, но при использовании hibernate и attributeBuilder я застреваю при попытке привести к тексту.
Я пытался использовать аннотацию @Formula в myOwnEntity:
@Formula("id::Text")
private String idToText;
, но все равно получите исключение:
java.lang.IllegalArgumentException: значение параметра [% 3%] не соответствует ожидаемому типу [java.lang.Long (n /a)]
final CriteriaQuery<MyOwnEntitiy> criteriaQuery = CriteriaBuilder.createQuery(MyOwnEntitiy.class);
final Root<MyOwnEntitiy> myOwn = criteriaQuery.from(MyOwnEntitiy.class);
criteriaQuery.where(CriteriaBuilder.like(myOwn.get("idToText"), "%3%")))
Я ожидаю увидеть в hibernate sql то же или похожее, что и в обычном sql.