Jdbi: 值为 null 的枚举参数不使用类型 VARCHAR

创建于 2019-01-15  ·  4评论  ·  资料来源: jdbi/jdbi

我有空枚举值和 JDBI v3.5.1 的问题

枚举在数据库中表示为 VARCHAR,就像 JDBI 推荐的默认表示一样。 但是,如果我尝试通过 SqlObject 插入空值,则空值将设置为类型OTHER 。 这会导致类型错误,至少对于 Oracle 数据库是这样。

查看BuiltinArgumentFactory (或 master 中的EnumArgument ),似乎空值总是与getUntypedNullArgument绑定。 我能够通过像这样注册自定义ArgumentFactory来解决这个问题:

<strong i="13">@Override</strong>
public Optional<Argument> build(Type type, Object value, ConfigRegistry config) {
  if (value == null && GenericTypes.getErasedType(type).isEnum()) {
    return Optional.of(new NullArgument(Types.VARCHAR));
  }
  return Optional.empty();
}

当前的行为是有意的吗? 或者您会接受对EnumArgument的更改,其中包括 . 自定义参数工厂?

最有用的评论

我完全同意最好避免使用 Oracle 数据库(至少来自 Java)。

但是,我已经使用 HEAD 中的 JDBI 针对 Oracle 数据库运行了测试,一切看起来都不错!

所有4条评论

我们现在实际上正在处理枚举处理翻新。 我们将在更改中考虑此问题:)

这绝对是一个错误,通常我们会独立于新功能修复它。 但是由于我们已经开放了一个 PR 来修复这个问题以及其他新功能,我们将让它合并。

@rherrmann我们已经合并了一些 Enum 更改(#1427),但我个人没有要测试的 oracle 数据库。 您能否在更改后构建jdbi并验证我们是否已修复您的问题(并且没有破坏其他任何内容)? 谢谢!

(我们不得不从主 jdbi 中删除 Oracle 构建和测试,因为需要荒谬的 Maven 设置,并且 Oracle 无法可靠地托管他们的 jdbc 驱动程序)

我完全同意最好避免使用 Oracle 数据库(至少来自 Java)。

但是,我已经使用 HEAD 中的 JDBI 针对 Oracle 数据库运行了测试,一切看起来都不错!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

stevenschlansker picture stevenschlansker  ·  4评论

jarlah picture jarlah  ·  3评论

keith-miller picture keith-miller  ·  3评论

kkrgwbj picture kkrgwbj  ·  4评论

raderio picture raderio  ·  6评论