gpt4 book ai didi

java - JPA 标准 API 函数转换或转换

转载 作者:行者123 更新时间:2023-12-02 06:16:18 27 4
gpt4 key购买 nike

我正在尝试将以下 SQL 转换为 CriteriaBuilder 代码

SQL:

SELECT * FROM logging WHERE CONVERT(log_action, CHAR(100)) = 'delete'

log_action 定义为 varbinary(32)。

代码:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Logging> query = cb.createQuery(Logging.class);
Root<Logging> from = query.from(Logging.class);
Expression<Byte> path = from.get("logAction");
Expression<String> convertFunction = cb.function("CONVERT", String.class, path);

query.select(from);

Predicate predicate = cb.equal(convertFunction, "delete");

query.where(predicate);

return em.createQuery(query).getResultList();

知道我做错了什么吗?

谢谢

肖恩

最佳答案

在尝试了很多 CriteriaQuery 的函数方法之后。我陷入困境是因为

private static final String PG_TRANSLATE_TO = "char(100)";
ParameterExpression<String> p = cb.parameter(String.class,"param0" );
Expression<String> convertFunction = cb.function("CONVERT", String.class, from.get("log_action"), p);

总是连接 char(100),但使用引号 'char(100)',则会出现 SQL 错误。

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 ''char(100)')='delete'' 附近使用的正确语法

所以我决定直接对字节进行 Criteria 查询,因为它们开头是字符串。并使用以下代码。

    CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery <Logging> query = cb.createQuery(Logging.class);

ParameterExpression<String> p = cb.parameter(String.class,"param0" );
Root<Logging> from = query.from(Logging.class);

query.select(from);
query.where( cb.equal(from.get("log_action"), "delete".getBytes()));

System.out.println(em.createQuery(query).getResultList());

这确实有效

hibernate :从日志记录logging0_中选择logging0_.log_id为log1_3_,logging0_.log_action为log2_3_,logging0_.log_type为log3_3_,其中logging0_.log_action=?

[日志记录 [log_id=1、log_type=delete、log_action=null]、日志记录 [log_id=2、log_type=delete、log_action=null]、日志记录 [log_id=3、log_type=delete、log_action=null]、日志记录[log_id=4、log_type=delete、log_action=null]、记录 [log_id=5、log_type=delete、log_action=null]、记录 [log_id=6、log_type=delete、log_action=null]、记录 [log_id=8、 log_type=删除, log_action=null]]

说实话,对于大量数据,您可能会遇到性能问题,但我也不确定 XD。但最后是一个解决方案。如果我的回答对您有帮助,别忘了点赞哦。

关于java - JPA 标准 API 函数转换或转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435645/

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