سؤال

أريد استخدام نوع Uuid الأصلي postgresql مع uuid java uuid. أنا أستخدم السبات كمزود JPA الخاص بي و Orm. إذا حاولت حفظها مباشرة، فقد تم حفظه فقط كدخل في Postgres.

كيف يمكنني أن أفعل هذا؟

هل كانت مفيدة؟

المحلول

حاول استخدام أحدث إصدار التطوير من برنامج تشغيل JDBC (حاليا 8.4DEV-700)، أو انتظر إصدار الإصدار التالي. (تم تحريره للإضافة: 8.4-701 تم إصداره)

ال ملاحظات الإصدار أذكر هذا التغيير:

خريطة قاعدة قاعدة البيانات Uuid إلى java.util.uuid. هذا يعمل فقط من أجل إصدارات خادم جديد نسبيا (8.3) و JDK (1.5) إصدارات.

نصائح أخرى

إليك إعادة نشر إجابتي postgresql uuid بدعم من السبات؟ ... أعرف أن هذا السؤال قديم، ولكن إذا تعثر شخص ما عبر ذلك، فسيمساعدهم ذلك.

يمكن حل هذا عن طريق إضافة التوضيح التالي إلى UUID:

import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;

أما لماذا لا تجعل السبات هذا الإعداد الافتراضي، لم أستطع إخبارك ...

تحديث: لا يزال هناك مشاكل باستخدام createNativeQuery طريقة لفتح كائنات لها حقول UUID. لحسن الحظ، createQuery الطريقة حتى الآن عملت بشكل جيد بالنسبة لي.

في استخدام غير JPA، أقوم بإنشاء تطبيق USERTYPE لتنسيق UUID كسلسلة يقبل postgresql، ثم قم فقط بإعطاء اسم تطبيق Usertype كنوع العمود.

يمكنك محاولة مع:

 @Column(name="foo", columnDefinition="uuid") 

حيث colordefinition هو جزء من SQL الأصلي

ربما يمكنك الحصول على نوع UUID الذي يتم تحويله تلقائيا إلى سلسلة (Uuid.Toststring () يجب أن يمنح تمثيل 60-Char الكنسي)؟ عادة ما تقوم DBS بتحويل الأشياء بشكل موثوق بين السلاسل والأنواع الأصلية.

جرب هذا

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top