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

فهم MappedSuperclass في JPA

تم النشر بتاريخ 2024-09-02
تصفح:200

Entendendo @MappedSuperclass em JPA

يوفر JPA (Java Persistence API) العديد من التعليقات التوضيحية لتعيين فئات Java إلى جداول قاعدة البيانات. أحد هذه التعليقات التوضيحية المفيدة هو @MappedSuperclass، والذي يُستخدم لتعيين فئة يجب أن ترث خصائصها بواسطة فئات كيانات أخرى، ولكنها ليست كيانًا بحد ذاته. دعونا نستكشف فائدة هذا التعليق التوضيحي من خلال مثال عملي يتضمن فئات مثل المركبات والسيارات والدراجات النارية.

ما هو @MappedSuperclass؟

يتم استخدام التعليق التوضيحيMappedSuperclass للإشارة إلى أن الفئة لا ينبغي أن تكون كيانًا مستقلاً، ولكن يجب أن ترث سماتها بواسطة فئات أخرى تمثل كيانات. يعد هذا مفيدًا عندما تريد مشاركة السمات المشتركة بين كيانات متعددة دون إنشاء جدول منفصل للفئة الأساسية.

الميزات الرئيسية:

  1. - الفئة المشروحة بـ @MappedSuperclass ليست كيانًا.
  2. - لا يمكن تنفيذ الاستعلامات مباشرة على فئة @MappedSuperclass.
  3. - يتم تعيين الفئات الفرعية التي توسع فئة @MappedSuperclass إلى جداول فردية في قاعدة البيانات، ولكنها ترث الحقول من الفئة الأساسية.

مثال عملي

لنقم بإنشاء مثال باستخدام التسلسل الهرمي للفئة للمركبة والسيارة والدراجة النارية، حيث تكون المركبة هي الفئة الفائقة.

1. الفئة الأساسية: مركبة

import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class Veiculo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String marca;
    private String modelo;
    private int ano;

    // Getters e Setters

}
  • تم وضع تعليقات توضيحية على فئة المركبة باستخدام @MappedSuperclass.
  • تحتوي فئة المركبة على حقل المعرف الموضح بـ @id و @GeneratedValue. سيتم توريث هذا المعرف الفريد لجميع الفئات الفرعية، مما يضمن أن كل كيان مشتق من المركبة لديه حقل معرف.
  • يحدد ثلاث سمات مشتركة: العلامة التجارية والطراز والسنة.

2. فئة فرعية: سيارة

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "carro")
public class Carro extends Veiculo {

    private int quantidadePortas;

    // Getters e Setters

}
  • ترث فئة السيارة سمات فئة السيارة.
  • تم وضع تعليق توضيحي عليه باستخدام @Entity وتعيينه إلى جدول يسمى السيارة.

3. فئة فرعية: دراجة نارية

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "motocicleta")
public class Motocicleta extends Veiculo {

    private boolean temSidecar;

    // Getters e Setters
}
  • ترث فئة الدراجات النارية أيضًا سمات فئة المركبات.
  • تم التعليق عليه باستخدام @Entity وتعيينه إلى جدول يسمى دراجة نارية.

تعيين الجدول

باستخدام الفئات المذكورة أعلاه، سيقوم JPA بإنشاء الجداول التالية في قاعدة البيانات:

  1. طاولة السيارة: تحتوي على أعمدة للنوع والموديل والسنة والكميةالأبواب.
  2. دراجة نارية طاولة: تحتوي على أعمدة للطراز والطراز والسنة وTemSidecar.

جدول المركبة غير موجود في قاعدة البيانات، حيث أن فئة المركبة هي مجرد فئة فائقة وليست كيانًا.

فوائد استخدام@MappedSuperclass

  • مركزية المعرف: تتم إدارة حقل المعرف في الفئة الفائقة. جميع الكيانات المشتقة من المركبة تشترك في نفس نظام التعريف.
  • إعادة استخدام الكود: يمكن تركيز السمات المشتركة في فئة فائقة، وتجنب الازدواجية في الفئات الفرعية.
  • سهولة الصيانة: يمكن إجراء التغييرات على السمات المشتركة في مكان واحد.
  • نموذج البيانات المتماسك: تشترك الفئات الفرعية في نفس البنية، مما يجعل النموذج أسهل في التعامل معه وفهمه.

الاعتبارات

إذا كنت تريد أن تكون الفئة الفائقة أيضًا كيانًا (على سبيل المثال للاستعلامات المباشرة)، فاستخدم استراتيجية الوراثة @Inheritance بدلاً من @MappedSuperclass.
@MappedSuperclass مثالي للمواقف التي لا تحتاج فيها الفئة الأساسية إلى الاستمرار ككيان فردي، ولكن خصائصها ذات صلة بكيانات متعددة.

خاتمة

يعد التعليق التوضيحيMappedSuperclass أداة قوية لإنشاء تسلسلات هرمية للفئات قابلة لإعادة الاستخدام في JPA. في المثال أعلاه، تمكنا من تركيز السمات المشتركة في السيارة، وفي الوقت نفسه، الحفاظ على المرونة والاستقلالية لكيانات السيارة والدراجة النارية. يعزز هذا النهج تصميمًا أكثر وضوحًا وأكثر نمطية، خاصة في الأنظمة التي تحتوي على كيانات متعددة تشترك في خصائص مماثلة.

بيان الافراج هذه المقالة مستنسخة على: https://dev.to/gregoriohd/entendendo-mappedsuperclass-em-jpa-4310?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3