一尘不染

JPA:如何在静态JPA MetaModel中使用NUMBER列执行LIKE?

hibernate

我确实有一个带有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>, ...)

.as(String.class)由于JPA中的某些错误,使用强制转换该列失败,但是我现在没有错误号。但是,最新版本的JPA /
Hibernate中未解决此问题。无论如何,它会导致有关某些无效SQL语句生成的运行时异常。

现在,我只需要一种获取与SQL等效的条件API的方法

... WHERE numbercol LIKE '123%';

搜索该主题已经产生了以下响应,这些响应没有帮助,因为我有一个静态元模型: NHibernate-使用CriteriaAPI对整数列进行LIKE搜索的最简单方法?和JPA/标准API-相似和均等问题
有任何想法吗?

在此先感谢多米尼克


阅读 274

收藏
2020-06-20

共1个答案

一尘不染

不,它不会因错误而失败,它可以按指定方式工作(例如,在Javadoc中):

对表达式执行类型转换,返回新的表达式对象。此方法不会导致类型转换:运行时类型不会更改。警告:可能会导致运行时失败。

您使用的方法执行转换,并且需要转换。通常,在JPA中不支持从BigDecimal转换为String。

2020-06-20