2

我可以知道如何将以下 MySQL SQL 转换为 JPA 查询吗?

SELECT * FROM ORDER
WHERE LPAD(BATCH, 2, ' ') < LPAD('X', 2, ' ') ;

我想不通的是 JPA 中的 LPAD() 字符串函数。

你有什么主意吗?

4

2 回答 2

1

我知道这是一篇很老的帖子,但是当一些同事在构建 JPA 查询如何做同样的事情时,我总是会受到质疑。几乎从来没有你会找到一个完美的拟合函数来做你想做的事。但是,使用一些逻辑,您可以在完整的 JPA 中获得相同的结果。

LPAD 的一个例子。

Expression<String> numberWithZeroLeft = builder.concat("0000", root.get("myNumber")); //Return something like 000012
Expression<Integer> expressionLength = builder.length(numberWithZeroLeft);
Expression<String> numberLpad = builder.substring(numberWithZeroLeft, e.builder.sum(expressionLength, -3), e.builder.literal(4)); //Return something like 0012

query.select(numberLpad);

想一想:

I have a string X, and need a string formatted in 4 zeros.
So we will get 0000 + X => "0000X"
And now just get the 4 last characters using substring.

我希望对某人有所帮助。

干杯。=]

于 2019-07-02T19:09:55.487 回答
0

在 EclipseLink 2.1 中有一个函数 FUNC 用于调用数据库特定的函数,例如:

FUNC('LPAD', BATCH, 2, ' ') < FUNC('LPAD', 'X', 2, ' ')

从 EclipseLink 2.4 和 JPA 2.1 开始,有具有相同功能的 FUNCTION 运算符

于 2016-01-14T08:29:17.687 回答