Java Ebean-按UUID列类型中UUID的一部分查找
从历史原因来看,我们有以下带有几个UUID值的ORM模型。是的,我知道。。我们必须为用户实现新的前端,用户只能写部分UUID(打印在盒子、纸张等上),用于手动验证(工厂问答)。通常情况下,这是通过QR阅读器完成的,但在某些情况下,无法对其进行扫描。所以用户可以写前10个字符或最后6个字符 !!->我们不能改变这个模型的任何东西。(公司…) 我为什么这么问。当我们试图查找包含这部分UUID的对象列表时,Ebean中的错误参数类型出现异常Java Ebean-按UUID列类型中UUID的一部分查找,java,playframework,orm,uuid,ebean,Java,Playframework,Orm,Uuid,Ebean,从历史原因来看,我们有以下带有几个UUID值的ORM模型。是的,我知道。。我们必须为用户实现新的前端,用户只能写部分UUID(打印在盒子、纸张等上),用于手动验证(工厂问答)。通常情况下,这是通过QR阅读器完成的,但在某些情况下,无法对其进行扫描。所以用户可以写前10个字符或最后6个字符 !!->我们不能改变这个模型的任何东西。(公司…) 我为什么这么问。当我们试图查找包含这部分UUID的对象列表时,Ebean中的错误参数类型出现异常 Caused by: org.postgresql.util
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);
}
Query Query=Ebean.find(Model\u OrderCross.class);
//其中,订单_b类似于完整UUID“f223274c-51ca-4489-a5b2-7d3b29887cfb”中的“f223274c-51”
如果(request.order_b!=null){
query.where().icontains(“order_b”,request.order_b);
}
如果(request.order_c!=null){
query.where().icontains(“order_c”,request.order_c);
}
- 对于普通字符串或文本值,。icontains(..)起作用
lower(string)
接受字符串文字并“将[a]字符串转换为小写”表示
正如异常消息所说
错误:函数下限(uuid)不存在
因此,您必须制定标准查询,以获取UUID
值的字符串表示,例如:
query.where().icontains("order_b", request. order_b.toString());
这应该能奏效。请注意末尾的toString()
,它将转换为字符串文字。的JavaDoc中描述了转换的详细信息
为了便于参考,我添加了您在代码片段中应用的方法的JavaDoc链接。在内部,它“使用lower()
函数使表达式不区分大小写”
希望有帮助。根据PostgreSQL文档部分(表9.8),函数
lower(string)
接受字符串文字并“将[a]字符串转换为小写”表示
正如异常消息所说
错误:函数下限(uuid)不存在
因此,您必须制定标准查询,以获取UUID
值的字符串表示,例如:
query.where().icontains("order_b", request. order_b.toString());
这应该能奏效。请注意末尾的toString()
,它将转换为字符串文字。的JavaDoc中描述了转换的详细信息
为了便于参考,我添加了您在代码片段中应用的方法的JavaDoc链接。在内部,它“使用lower()
函数使表达式不区分大小写”
希望能有帮助