gpt4 book ai didi

java - 我们可以对 JPA 标准表达式进行左填充吗?

转载 作者:行者123 更新时间:2023-12-01 16:45:49 25 4
gpt4 key购买 nike

我有一个主键列,例如 colId,其值例如 70 71 等。

现在我想要一个JPA Criteria表达式来返回它,例如0070 0071等。

我们如何在 JPA Criteria Expression 中做到这一点。

Expression<String> colId = root.get("colId").as(String.class);

现在有什么东西可以左边填充这个表达式吗?

最佳答案

您可以使用条件构建器“函数”表达式来创建表达式来执行数据库函数。 Postgres 和 MySQL 有一个“LPAD”函数可以在这种情况下使用。我仍在为此设置一个测试用例,但我有以下内容:

Expression<String>[] args = new Expression[3];

args[0] = root.get("id_column_name").as(String.class);
args[1] = criteriaBuilder.literal("5");
args[2] = criteriaBuilder.literal("0");

Expression<String> expressionToGetPaddedId =
criteriaBuilder.function("LPAD", String.class, args);

供引用:

<小时/>

更新:

使用快速测试用例,我发现我的第二个参数输入错误。这是我的规范中的“toPredicate”重写方法:

    @Override
public Predicate toPredicate(@NonNull Root<T> root,
@NonNull CriteriaQuery<?> criteriaQuery,
@NonNull CriteriaBuilder criteriaBuilder) {


Expression<String> eTaskID = root.get("id").as(String.class);
Expression<Integer> length = criteriaBuilder.literal(4);
Expression<String> fillText = criteriaBuilder.literal("0");

Expression<String> expressionToGetPaddedId = criteriaBuilder.function(
"LPAD",
String.class,
eTaskID, length, fillText);

return criteriaBuilder.like(expressionToGetPaddedId, "0001");
}

生成的sql是:

Hibernate: 
select
dataset0_.id as id1_2_,
dataset0_.created_at as created_2_2_,
dataset0_.is_deleted as is_delet3_2_,
dataset0_.model as model4_2_,
dataset0_.name as name5_2_,
dataset0_.organization as organiza6_2_,
dataset0_.properties as properti7_2_,
dataset0_.type as type8_2_,
dataset0_.updated_at as updated_9_2_
from
datasets dataset0_
where
LPAD(cast(dataset0_.id as varchar(255)), 4, ?) like ?

测试用例运行良好。看起来不错,对吧?

关于java - 我们可以对 JPA 标准表达式进行左填充吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61781158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com