我有一个静态元模型,其中包含一个数字列(实际上是 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>, ...)
使用.as(String.class)
将列转换为字符串类型时由于JPA中的某些Bug,该方法失败了,但我现在手头没有该Bug编号。尽管如此,在最新版本的JPA / Hibernate中它仍未被修复。无论如何,这会导致生成一条有关某些无效SQL语句的运行时异常。
现在我只需要找到一种获取与SQL等效的标准API的方法。
... WHERE numbercol LIKE '123%';
搜索该主题已经得到以下回复,但由于我有一个静态元模型,所以它们没有帮助: NHibernate-Criteria API中执行LIKE搜索整数列的最简单方法?和JPA/Criteria API-Like&equal问题 有什么想法吗?
提前致谢 Dominik
123%
,我有= 123 OR between(1230,1239)OR between(12300,12399)OR between(123000,123999)
等等。虽然不是最好的方法,但至少它能够工作。 - Dominik Sandjaja