HTML וכל מה שמסביב

מה זה JPA?

JPA הם ראשי תיבות של Java Persistence API.

במלים פשוטות זוהי ספריית Java שמאפשרת למפות אובייקטים ב Java לבסיס נתונים רלציוני.

מונח המקביל ל JPA הוא O/RM או Object Relational Mapping.

אפשר להשתמש ב JPA גם ב Standard Edition וגם ב Enterprise Edition של Java.

JPA מבוסס על annotations (פירושים) – תגיות Java שמתחילות ב @, ומופיעות לפני הגדרות של class ו member.

קיימות מספר ספריות שמממשות O/RM. אחת הנפוצות בהן היא Hibernate.

JPA annotations

  1. Entity@ – הגדרת class כטבלה בבסיס נתונים. ל Entity יש תכונה אחת:
    • name – שם היישות בשאילתות. אסור שהשם הזה יהיה מילה שמורה ב Query Language.
  2. Table@ – הגדרת שם הטבלה, הסכימה והקטלוג בבסיס הנתונים עבור ה class. ל Table יש את התכונות הבאות:
    • name – שם הטבלה ב database.
    • schema – שם הסכמה.
    • catalog – שם הקטלוג (בבסיסי נתונים שתומכים בקטלוג).
  3. Id@ – הגדרת מפתח ראשי (primary key) לטבלה.
  4. GeneratedValue@ – יצירה אוטומטית של ערכים ל primary key. לפירוש הזה יש את התכונות הבאות:
    • generator – שם ה primary key המשמש לייצור המפתח.
    • strategy – שיטת הייצור של המפתח.
  5. Column@ – השם של העמודה בטבלה. ל Column יש את התכונות הבאות:
    • name – שם העמודה בטבלה.
    • columnDefinition – הגדרת העמודה, למשל CLOB NOT NULL.
    • nullable – האם יכול להיות NULL.
    • length – אורך העמודה במקרה של String.
    • ועוד…
  6. Basic@ – מאפשר למפות primitive או class פשוט לעמודה. ל Basic יש את התכונות הבאות:
    • fetch – שיטת הטעינה של השדב (LAZY או EAGER).
    • optional – האם יכול להיות NULL.
  7. Lob@ – הגדרה של שדה כ large object.
  8. Transient@ – מסמן שהשדה לא משתתף ב persistence.
  9. Temporal@ – מציין משתנה מסוג תאריך או שעה. ל Temporal יש את התכונה הבאה:
    • value – סוג ה Temporal (כלומר DATE, TIME או TIMESTAMP).
  10. Embedded@ ו Embeddable@ – שני פירושים שמאפשרים לכלול טבלה בתוך טבלה.
  11. AttributeOverride@ – מאפשר לשנות שם של עמודה ב embedding object. לפירוש הזה יש את התכונות הבאות:
    • name (חובה) – שם השדה ב embeddable object.
    • column (חובה) – שם העמודה בטבלה שיישויך לשדה.
  12. EmbeddedId@ – מפתח ראשי שמורכב ממספר שדות ב embeddable object.
  13. OneToOne@ – מיפוי של 1:1 בין אובייקטים. נעשה בעזרת foreign key. המיפוי צריך להיות דו כיווני. ל OneToOne יש את התכונות הבאות:
    • cascade – הפעולות שצריכות לעבור לאובייקט הממופה. האפשרויות הן: ALL, MERGE, PERSIST, REFRESH ו REMOVE.
    • fetch – אפשרויות: EAGER או LAZY.
    • mappedBy – השדה שהוא הבעלים של המיפוי. רלוונטי רק בצד ה inverse של המיפוי.
    • optional – האם המיפוי הוא אופציונלי. אם לא – שדות המיפוי לא יכולים להיות NULL.
    • targetEntity – ה class של יעד המיפוי.
  14. ManyToOne@ ו OneToMany@ – מיפוי של M:1 ו 1M. גם כאן המיפוי צריך להיות דו כיווני.
  15. ManyToMany@ – מיפוי של M:N. גם כאן המיפוי צריך להיות דו כיווני. לפירושים האלו יש כמעט את אותם שדות כמו ל OneToOne.
  16. JoinTable@ – עבור מיפוי של M:N משתמשים בטבלת קישור. אם לטבלה הראשונה קוראים FIRST ולשניה SECOND, אז לטבלת הקישור קוראים FIRST_SECOND. בעזרת JoinTable אפשר לשנות את השם של טבלת הקישור.
  17. JoinColumn@ – שינוי שמות של עמודות במיפוי.
  18. OrderBy@ – משמש ביחד עם OneToMany@ ו ManyToMany@ כדי למיין את הצד של הרבים. ל OrderBy יש את התכונה הבאה:
    • value – העמודה או העמודות למיין, ביחד עם סדר המיון (ASC או DESC). אם ה value לא מצויין אז המיון נעשה לפי המפתח הראשי.
  19. Inheritance@ – מאפשר לשמור ירושה של אובייקטים בטבלאות. לפירוש הזה יש תכונה strategy עם 3 אפשרויות:
    • SINGLE_TABLE – טבלה אחת מאחסנת את כל האובייקטים בירושה. זהו שילוב מנצח במונחים של ביצועים ופשטות, אך יש כאן מעט בזבוז של מקום. זוהי ברירת המחדל ל strategy.
    • JOINED – טבלה לכל מחלקה (class). גם ל abstract class. מימוש פשוט אבל ביצועים איטיים.
    • TABLE_PER_CLASS – טבלה לכל concrete class. לא מומלץ, מימוש מורכב.
  20. DiscriminatorColumn@ – עמודה בטבלה שמאפשרת לאפיין את סוג האובייקט. שימושי רק עבור SINGLE_TABLE או JOINED. לפירוש הזה יש מספר תכונות:
    • name – שם העמודה. ברירת המחדל היא DTYPE.
    • discriminatorType – ה type של העמודה. ברירת המחדל היא STRING.
    • length – אורך העמודה במקרה של STRING. ברירת המחדל היא 31 תוים.
  21. DiscriminatorValue@ – הערך שמאפיין את האובייקט היורש.
  22. PrePersist@ ו PostPersist@ – מתודות שנקראות לפני ואחרי שמירה של אובייקט.
  23. PreRemove@ ו PostRemove@ – מתודות שנקראות לפני ואחרי מחיקה של אובייקט.
  24. PreUpdate@ ו PostUpdate@ – מתודות שנקראות לפני ואחרי עדכון של אובייקט.
  25. PostLoad@ – מתודה שנקראת אחרי שהאובייקט נטען.
  26. PersistenceContext@ – משמש להגדרת EntityManager.
  27. NamedQuery@ – הגדרת שאילתה. ל NamedQuery יש את התכונות הבאות:
    • name – שם השאילתה (חובה).
    • query – השאילתה עצמה ב Java Persistence query language.

JPQL

ל JPA יש שפת שאילתות שנקראת JPQL והיא דומה מאוד ל SQL.

דוגמאות

יובאו בהמשך.

רפרנס

אתר מצוין על JPA אפשר למצוא פה.

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post.

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

יצירה של אתר חינמי או בלוג ב־WordPress.com.

%d בלוגרים אהבו את זה: