"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تعيين أعمدة PostgreSQL JSON لكيانات السبات باستخدام نوع مستخدم مخصص؟

كيفية تعيين أعمدة PostgreSQL JSON لكيانات السبات باستخدام نوع مستخدم مخصص؟

تم النشر بتاريخ 2024-11-08
تصفح:834

How to Map PostgreSQL JSON Columns to Hibernate Entities Using a Custom User Type?

تعيين أعمدة PostgreSQL JSON إلى كيانات السبات

عند العمل مع قواعد بيانات PostgreSQL، من الشائع مواجهة أعمدة تخزن البيانات بتنسيق JSON. لتعيين هذه الأعمدة بشكل فعال إلى كيانات Java باستخدام السبات، من الضروري اختيار نوع البيانات المناسب.

في هذا السياق، يدور السؤال المطروح حول تعيين عمود PostgreSQL JSON إلى حقل كيان السبات. تتمثل الطريقة الشائعة في استخدام حقل سلسلة، كما هو موضح في مقتطف التعليمات البرمجية المقدم:

@Entity
public class MyEntity {

    private String jsonPayload;

    public MyEntity() {
    }
}

ومع ذلك، يمكن أن يؤدي هذا الأسلوب إلى استثناءات عند حفظ الكيان، حيث يحاول السبات تحويل سلسلة إلى JSON.

نوع القيمة الصحيح لأعمدة JSON

لتعيين عمود PostgreSQL JSON بشكل صحيح إلى حقل كيان السبات، فكر في استخدام نوع مستخدم مخصص. من خلال إنشاء تطبيق userType، مثل StringJsonUserType، يمكنك التعامل مع التعيين بين قيم String ونوع قاعدة بيانات JSON.

إليك نموذج للتنفيذ:

public class StringJsonUserType implements UserType {
    ...
    @Override
    public int[] sqlTypes() {
        return new int[] { Types.JAVA_OBJECT};
    }

    ...
}

يمكنك بعد ذلك إضافة تعليق توضيحي لخاصية الكيان باستخدام userType المخصص:

@Type(type = "StringJsonObject")
public String getJsonPayload() {
    return jsonPayload;
}

تكوين إضافي

لتنفيذ هذا الحل بالكامل، قد تحتاج إلى:

  1. توسيع لهجة PostgreSQL لتشمل نوع JSON :
public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {
    ...
    this.registerColumnType(Types.JAVA_OBJECT, "json");
    ...
}
  1. قم بإضافة تعليق توضيحي لفئة الكيان باستخدام @TypeDefs:
@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})
  1. حقن المكتبات الضرورية في تنفيذ نوع المستخدم لرسم الخرائط المتقدمة.

مشروع GitHub المرجعي

لمزيد من الاستكشاف، خذ بعين الاعتبار مشروع GitHub المقدم: https://github.com/timfulmer/hibernate-postgres-jsontype

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3