当前位置: 首页 > 知识库问答 >
问题:

使用Oracle原始类型的JOOQ Where子句

贺乐意
2023-03-14

我试图编写一个JOOQ查询,其中需要按UUID进行搜索,UUID作为原始类型存储在Oracle数据库中。在Jooq生成的实体中,这些类型的字段被定义为字节数组。

另一方面,当将列名强制转换为字符串时:

jooqquery.addconditions(Table.uuid_column.cast(string.class).eq(UUID_AS_STRING));

在运行时产生jdbc异常:

    private byte[] getUUIDtoBytes(UUID devId) {
        byte[] uuidBytes = new byte[16];
        ByteBuffer.wrap(uuidBytes)
                .order(ByteOrder.BIG_ENDIAN)
                .putLong(devId.getMostSignificantBits())
                .putLong(devId.getLeastSignificantBits());
        return uuidBytes;
    }

共有1个答案

孟承嗣
2023-03-14

我怀疑您是否将UUID存储为UUID.getBytes()。调用string.getBytes()将产生字符串的unicode编码,这将是存储UUID的一种浪费方式,UUID已经是十六进制格式。更可能的编码在这里的SO问题中记录。

在任何情况下,您都应该找出您的UUID值是如何存储和编码的,并重用该编码机制。对于jOOQ,理想情况下,您将在uuid_column中附加一个数据类型绑定或转换器,这样在任何jOOQ查询中都不必再考虑这个问题。有关这方面的更多信息,请参见:https://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings

 类似资料:
  • JavaScript 允许我们像使用对象一样使用原始类型(字符串,数字等)。JavaScript 还提供了这样的调用方法。我们很快就会学习它们,但是首先我们将了解它的工作原理,毕竟原始类型不是对象(在这里我们会分析地更加清楚)。 我们来看看原始类型和对象之间的关键区别。 一个原始值: 是原始类型中的一种值。 在 JavaScript 中有 7 种原始类型:string,number,bigint,

  • 如果类型参数在创建期间传递了npt,则原始类型是泛型类或接口的对象。 以下示例将展示上述概念。 例子 (Example) 使用您选择的任何编辑器创建以下Java程序。 GenericsTester.java package com.wenjiangs; public class GenericsTester { public static void main(String[] args) {

  • 问题内容: 我有一个笼子课: 我试图在另一个类main方法中实例化Cage对象: 我收到错误:笼子是原始类型。泛型Cage的引用应参数化。我尝试了几个想法,但对这种棘手的语法感到困惑:o( 问题答案: 是通用类型,因此您需要指定一个类型参数,例如这样(假设有一个): 您可以使用任何扩展的类型(甚至是自身)。 如果省略type参数,那么在这种情况下最终得到的是。但是,即使这是您想要的,您仍应明确声明

  • 我试着搜索像Multi-raw类型的东西,但我没有找到任何东西。 我该怎么做?

  • 是否可以为基元类型定义招摇定义/模型?例如,考虑以下几点 但是,上面的示例返回了许多错误(例如,swagger需要一个字段)并且没有示例使用任何不是。 目的是将其用作另一个模型的子组件和参数——以某种方式重用已经定义的组件。 把这想象成一个昂首阔步的typedef 编辑:根据规范,定义对象与模式对象相同http://swagger.io/specification/#schemaObject,表示

  • 问题内容: 我想对原始类型和引用类型之间的Java中的isAssignableFrom行为有一个更好的了解。 例如: 我知道在分配基元<->引用时会根据需要进行装箱/拆箱,但是我想过,因此isAssignableFrom在上面的前两个示例中将返回true。 有人可以解释为什么它返回false,这里合适的测试是什么? 问题答案: 您 实际上 不能为变量分配值-但可以使用自动装箱从 转换为。 该Jav