【发布时间】:2020-04-03 20:49:27
【问题描述】:
我正在尝试编写一个需要按 UUID 搜索的 JOOQ 查询,该 UUID 以 RAW 类型存储在 Oracle 数据库中。在 Jooq 生成的实体中,这些类型的字段被定义为字节数组。
简单地将字符串转换为字节数组并没有找到匹配的值:
jooqQuery.addConditions(TABLE.UUID_COLUMN.eq(UUID_AS_STRING).getBytes()));
另一方面,将列名转换为字符串时:
jooqQuery.addConditions(TABLE.UUID_COLUMN.cast(String.class).eq(UUID_AS_STRING));
在运行时产生 jdbc 异常:
"class":"o.h.engine.jdbc.spi.SqlExceptionHelper","rest":"ORA-00906: missing left parenthesis\n"
是否有正确的方法来转换它以产生一个正常工作的有效 sql?
编辑:我也尝试过使用TABLE.UUID_COLUMN.getDataType().convert(UUID_AS_STRING) 生成的查询与使用相同的空搜索结果执行 getBytes() 相同
已解决:使用此方法,将 UUID 转换为正确的字节数组:
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;
}
【问题讨论】: