Я фильтрую данные PrimeFaces DataTables с помощью динамических фильтров. У меня это работает с использованием Spring org.springframework.data.jpa.domain.Specification
. Теперь я не понимаю, как сделать то же самое с помощью QueryDSL.QueryDSL + PathBuilder + cast to string
Используя спецификацию, я могу использовать javax.persistence.criteria.Root
, чтобы получить javax.persistence.criteria.Join
, используйте javax.persistence.criteria.Expression.as(Class<String> type)
, чтобы передать его в строку и, наконец, использовать javax.persistence.criteria.CriteriaBuilder.like(Expression<String> x, String pattern, char escapeChar)
.
Как сделать то же самое в QueryDSL? Я могу получить PathBuilder с помощью new PathBuilder<T>(clazz, "entity")
(вам действительно нужно использовать переменную здесь? Я бы хотел, чтобы мой класс был общим ...), но затем com.mysema.query.types.path.PathBuilder.get(String property)
возвращает новый PathBuilder вместо Expression.
Если я пытаюсь использовать com.mysema.query.types.path.PathBuilder.getString(String property)
, я получаю java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Integer]
.
Кажется, что часть, которую мне не хватает, - это актерский состав. Я уверен, что кто-то уже имел дело с тем же.
Спасибо.
Edit: Стек трассировки для IllegalArgumentException
Попытка поиска текста "1" внутри целого столбца, используя com.mysema.query.types.path.PathBuilder.getString(String property)
- вот где мне нужно бросание случиться:
Caused by: java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Integer] at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:375) at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:348) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:375) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:442) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72) at com.mysema.query.jpa.impl.JPAUtil.setConstants(JPAUtil.java:44) at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:130) at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:97) at com.mysema.query.jpa.impl.AbstractJPAQuery.list(AbstractJPAQuery.java:240) at org.springframework.data.jpa.repository.support.QueryDslJpaRepository.findAll(QueryDslJpaRepository.java:102) ...
Не могли бы вы предоставить полный стек? –
@ user1622058 Удалось ли вам в этом разобраться? –
В конце концов я создал DTO и собрал Predicate вручную, используя stringValue() ... не лучший способ, но не нашел лучшего ... – user1622058