أواجه مشكلة في قيم التعداد الفارغة و JDBI v3.5.1
يتم تمثيل التعداد كـ VARCHAR في قاعدة البيانات ، تمامًا مثل التمثيل الافتراضي الذي أوصت به JDBI. ومع ذلك ، إذا حاولت إدخال قيمة فارغة من خلال SqlObject ، فسيتم تعيين القيمة الخالية كنوع OTHER
. يؤدي هذا إلى خطأ في النوع ، على الأقل في قاعدة بيانات Oracle.
بالنظر إلى BuiltinArgumentFactory
(أو 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
يتضمن معالجة الصفري كما هو موضح في ملف. مصنع حجة مخصصة؟
نحن نعمل بالفعل على تعداد يعالج التجديد في الوقت الحالي. سنأخذ في الاعتبار هذه المشكلة في التغييرات :)
هذا بالتأكيد خطأ ، وعادة ما نقوم بإصلاحه بشكل مستقل عن ميزة جديدة. ولكن نظرًا لأن لدينا بالفعل علاقات عامة مفتوحة تعمل على إصلاح هذا بالإضافة إلى الميزات الجديدة الأخرى ، فسنسمح لها بالاندماج.
مرحبًا rherrmann ، لقد دمجنا بعض تغييرات Enum (# 1427) ولكن ليس لدي قاعدة بيانات أوراكل شخصيًا لاختبارها. هل يمكنك إنشاء jdbi
من بعد هذا التغيير والتحقق من أننا قد أصلحنا مشكلتك (ولم نكسر أي شيء آخر)؟ شكرا!
(كان علينا إزالة Oracle build والاختبارات من jdbi الرئيسي بسبب إعداد Maven السخيف المطلوب ، وعدم قدرة Oracle على استضافة برنامج تشغيل jdbc الخاص بهم بشكل موثوق)
أوافق تمامًا على أنه من الأفضل تجنب استخدام قواعد بيانات Oracle (على الأقل من Java).
ومع ذلك ، فقد أجريت اختباراتي مع JDBI من HEAD مقابل قاعدة بيانات Oracle ويبدو كل شيء جيدًا!
التعليق الأكثر فائدة
أوافق تمامًا على أنه من الأفضل تجنب استخدام قواعد بيانات Oracle (على الأقل من Java).
ومع ذلك ، فقد أجريت اختباراتي مع JDBI من HEAD مقابل قاعدة بيانات Oracle ويبدو كل شيء جيدًا!