gpt4 book ai didi

dynamic - QueryDSL + PathBuilder + 转换为字符串

转载 作者:行者123 更新时间:2023-12-02 21:21:54 27 4
gpt4 key购买 nike

我正在使用动态过滤器过滤 PrimeFaces DataTables。我使用 Spring org.springframework.data.jpa.domain.Specification 进行此工作.现在我想知道如何使用 QueryDSL 执行相同的操作。

使用规范我可以使用javax.persistence.criteria.Root获得 javax.persistence.criteria.Join ,使用javax.persistence.criteria.Expression.as(Class<String> type)将其转换为 String 并最终使用 javax.persistence.criteria.CriteriaBuilder.like(Expression<String> x, String pattern, char escapeChar) .

如何在 QueryDSL 中执行相同操作?我可以使用 new PathBuilder<T>(clazz, "entity") 获取 PathBuilder (你真的必须在这里使用变量吗?我希望我的类是通用的......)但是 com.mysema.query.types.path.PathBuilder.get(String property)返回新的 PathBuilder 而不是表达式。

如果我尝试使用com.mysema.query.types.path.PathBuilder.getString(String property)我得到java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Integer] .

看来我缺少的部分是 Actor 阵容。我很确定已经有人在处理同样的事情了。

谢谢。

编辑:IllegalArgumentException 的堆栈跟踪

尝试使用com.mysema.query.types.path.PathBuilder.getString(String property)在整数列内搜索文本“1” - 这就是我需要 Actor 阵容的地方:

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)
...

最佳答案

要获得有效的条件,您需要考虑属性的类型,例如

pathBuilder.getNumber(Integer.class, property).stringValue().like(likePattern)

关于dynamic - QueryDSL + PathBuilder + 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com