gpt4 book ai didi

java - Ebean - 按 UUID 列类型中的 UUID 部分查找

转载 作者:行者123 更新时间:2023-12-02 02:04:26 25 4
gpt4 key购买 nike

根据历史原因,我们有如下的 ORM 模型,其中包含几个 UUID 值。是的,我知道..我们必须为用户实现新的前端,用户只能编写部分UUID(打印在盒子、纸张等上。)用于手动验证(工厂中的问答)。通常这是通过 QR 阅读器完成的,但在某些情况下无法扫描。因此用户可以写入前 10 个字符或最后 6 个字符...

!! -> 我们无法改变这个模型的任何东西。 (公司...)

public class Model_OrderCross {

public UUID id;
public UUID order_a;
public UUID order_b;
public UUID order_c;
public UUID order_e;
}

我为什么要问。当我们尝试查找具有这部分 UUID 的对象列表时,我们遇到来自 Ebean 的参数类型错误的异常

Caused by: org.postgresql.util.PSQLException
Cause message: ERROR: function lower(uuid) does not exist
Rada: No function matches the given name and argument types. You might need to add explicit type casts.

我正在使用 ORM 查询:

Query<Model_OrderCross > query = Ebean.find(Model_OrderCross.class);

// Where order_b is something like "f223274c-51" from Full UUID "f223274c-51ca-4489-a5b2-7d3b29887cfb"
if (request.order_b != null) {
query.where().icontains("order_b", request. order_b);
}

if (request.order_c != null) {
query.where().icontains("order_c", request. order_c);
}
  • 对于普通字符串或文本值..icontains(..)有效

最佳答案

根据 PostgreSQL 文档部分 9.4. String Functions and Operators (表 9.8),函数 lower(string) 接受字符串文字和“将 [a] 字符串转换为小写”表示形式。

正如异常消息所示,

ERROR: function lower(uuid) does not exist.

因此,您必须制定条件查询以获取 UUID 值的字符串表示形式,例如:

query.where().icontains("order_b", request. order_b.toString());

这应该可以解决问题。请注意最后的 toString() ,它执行到字符串文字的转换。转换的详细信息在 UUID.toString() 的 JavaDoc 中描述。 .

作为引用,我添加了 ExpressionList.icontains() 的 JavaDoc 的链接您在代码片段中应用的方法。在内部,它“使用 lower() 函数使表达式不区分大小写”。

希望有帮助。

关于java - Ebean - 按 UUID 列类型中的 UUID 部分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51029635/

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