我确实有一个带有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>, ...)
entity.get(Entity_.numbercol)
Path<BigDecimal>
...like(Expression<String>, ...) ... not applicable for the arguments (Path<BigDecimal>, ...)
.as(String.class)由于JPA中的某些错误,使用强制转换该列失败,但是我现在没有错误号。但是,最新版本的JPA / Hibernate中未解决此问题。无论如何,它会导致有关某些无效SQL语句生成的运行时异常。
.as(String.class)
现在,我只需要一种获取与SQL等效的条件API的方法
... WHERE numbercol LIKE '123%';
搜索该主题已经产生了以下响应,这些响应没有帮助,因为我有一个静态元模型: NHibernate-使用CriteriaAPI对整数列进行LIKE搜索的最简单方法?和JPA/标准API-相似和均等问题 有任何想法吗?
在此先感谢多米尼克
不,它不会因错误而失败,它可以按指定方式工作(例如,在Javadoc中):
对表达式执行类型转换,返回新的表达式对象。此方法不会导致类型转换:运行时类型不会更改。警告:可能会导致运行时失败。
您使用的方法执行转换,并且需要转换。通常,在JPA中不支持从BigDecimal转换为String。