【发布时间】:2012-04-05 19:55:50
【问题描述】:
我确实有一个带有 NUMBER(实际上是 BigDecimal,不要问为什么)列的静态元模型。现在我想对该数字列进行 LIKE 查询:
CriteriaBuilder cb;
cb.like(entity.get(Entity_.numbercol), "123%");
其中entity.get(Entity_.numbercol) 返回Path<BigDecimal>。当然,我得到一个编译错误:...like(Expression<String>, ...) ... not applicable for the arguments (Path<BigDecimal>, ...)
由于 JPA 中的一些错误,使用 .as(String.class) 铸造列失败,但我现在手头没有错误编号。不过,它在最新版本的 JPA/Hibernate 中并未修复。无论如何,它会导致生成一些无效 SQL 语句的运行时异常。
现在我只需要一种方法来获取与 SQL 等效的条件 API
... WHERE numbercol LIKE '123%';
搜索该主题时已经出现了以下响应,这无济于事,因为我有一个静态元模型: NHibernate - easiest way to do a LIKE search against an integer column with Criteria API? 和 JPA/Criteria API - Like & equal problem
有什么想法吗?
提前致谢 多米尼克
【问题讨论】:
-
作为一种解决方法,并且因为确保通配符始终是搜索字符串/数字的最后一个字符,我创建了一堆表达式之间,例如对于
123%我有=123 OR between (1230,1239) OR between(12300, 12399) OR between(123000, 123999)等等。不是最好的方法,但至少它有效。
标签: hibernate jpa jpa-2.0 criteria-api metamodel