我有空枚举值和 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
的更改,其中包括 . 自定义参数工厂?
我们现在实际上正在处理枚举处理翻新。 我们将在更改中考虑此问题:)
这绝对是一个错误,通常我们会独立于新功能修复它。 但是由于我们已经开放了一个 PR 来修复这个问题以及其他新功能,我们将让它合并。
嗨@rherrmann我们已经合并了一些 Enum 更改(#1427),但我个人没有要测试的 oracle 数据库。 您能否在更改后构建jdbi
并验证我们是否已修复您的问题(并且没有破坏其他任何内容)? 谢谢!
(我们不得不从主 jdbi 中删除 Oracle 构建和测试,因为需要荒谬的 Maven 设置,并且 Oracle 无法可靠地托管他们的 jdbc 驱动程序)
我完全同意最好避免使用 Oracle 数据库(至少来自 Java)。
但是,我已经使用 HEAD 中的 JDBI 针对 Oracle 数据库运行了测试,一切看起来都不错!
最有用的评论
我完全同意最好避免使用 Oracle 数据库(至少来自 Java)。
但是,我已经使用 HEAD 中的 JDBI 针对 Oracle 数据库运行了测试,一切看起来都不错!