Hibernate

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש
Hibernate
מפתח Red Hat
גרסה אחרונה 4.2.2 (22 במאי 2013)
מערכת הפעלה חוצה פלטפורמות (JVM)
סוג רישיון הרישיון הציבורי הכללי המוקטן של גנו
קטגוריה מיפוי אובייקטי-רלציוני
hibernate.org

Hibernate (הייברנייט) היא ספריית Java למיפוי אובייקטי-רלציוני (object-relational mapping - ORM), המספקת תשתית למיפוי (התאמה) בין מודל התכנות מונחה-עצמים, לבין בסיסי נתונים יחסיים מסורתיים. כאשר כותבים קוד העוסק בשימור נתונים (persistence), הייברנייט פותרת את בעיות חוסר ההתאמה בין מודל האובייקטים (תכנות מונחה-עצמים) למודל הרלציוני (בסיסי נתונים המורכבים מטבלאות), באמצעות החלפת הגישה הישירה לבסיס הנתונים, בשימוש בפונקציות high-level המטפלות באובייקטים. באנגלית, השם הכולל לקבוצת הבעיות הנובעות מחוסר ההתאמה בין מודל האובייקטים למודל הרלציוני הוא The object-relational impedance mismatch.

השירות המרכזי ש-Hibernate מספקת הוא מיפוי בין מחלקות Java לטבלאות של בסיסי נתונים (ומיפוי בין טיפוסי הנתונים של Java לטיפוסי נתונים של SQL). כמו כן, Hibernate מספקת אמצעים לביצוע שאילתות ואחזור נתונים, והיא יודעת ליצור את קריאות ה-SQL בעצמה. Hibernate מנסה להקל על עבודת המתכנת בכך שהיא חוסכת ממנו את הצורך בטיפול ידני ב-result sets (המידע המוחזר מביצוע שאילתה על בסיס נתונים), וביצוע המרות בין אובייקטים. השימוש ב-Hibernate מאפשר ליישום להיות פורטבילי (יביל) בין כל בסיסי הנתונים מבוססי SQL הנתמכים על ידי הספרייה, תוך תקורת ביצועים לא גבוהה.

Hibernate היא תוכנה חופשית המופצת תחת הרישיון הציבורי הכללי המוקטן של גנו.

מיפוי

המיפוי בין מחלקות ג'אווה לטבלאות של בסיס נתונים מבוצע באמצעות קונפיגורציה של קובץ XML או על ידי שימוש באנוטציות ג'אווה (Java annotations). כאשר משתמשים בקובץ XML, הייברנייט יכולה ליצור שלד של קוד מקור עבור מחלקות ה-persistence. כאשר משתמשים באנוטציות אין בכך צורך. כמו כן, הייברנייט יכולה להשתמש בקובץ ה-XML או באנוטציות כדי לתחזק את הסכמה של בסיס הנתונים.

הייברנייט מאפשרת לארגן יחסים מסוג "יחיד-לרבים" (one-to-many) ו"רבים-לרבים" (many-to-many) בין מחלקות. בנוסף לניהול הקשרים בין אובייקטים, הייברנייט יכולה לנהל גם יחסים רפלקסיביים בין אובייקטים, בהם לאובייקט יש יחס של "יחיד-לרבים" עם מופעים אחרים מאותו טיפוס נתונים.

הייברנייט תומכת במיפוי של ערכים מטיפוסים מורכבים, מה שמאפשר:

  • לדרוס את טיפוס ברירת המחדל של SQL שהייברנייט בוחרת בו כאשר היא ממפה עמודה בטבלה למשתנה מחלקה (property).
  • מיפוי enum של ג'אווה לעמודות כאילו שהם משתני מחלקה רגילים.
  • מיפוי של משתנה מחלקה יחיד לכמה עמודות.

סקירה

הייברנייט מאפשרת persistence "שקוף" עבור POJOs. הדרישה היחידה ממחלקה התומכת ב-persistence היא שיהיה לה קונסטרקטור שאינו מקבל ארגומנטים (לא חובה שהוא יהיה public). בחלק מהיישומים, למען תפקוד תקין נדרשות גם אנוטציות מיוחדות למתודות ()equals ו-()hashCode.

ניתן להשתמש ב-Hibernate ביישומי Java עצמאיים (standalone) כמו גם ביישומי Java EE המשתמשים ב-servlets ,EJB session beans ו-JBI service components. כמו כן ניתן להשתמש בהייברנייט כשירות מתוך שפות תכנות אחרות. לדוגמה, Adobe שילבה את הייברנייט בגרסה 9 של ColdFusion (אשר רצה על גבי שרתי יישומים של Java EE) עם שכבת אבסטרקציה של תחביר ופונקציות חדשות שהתווספו ל-CFML.

הייברנייט מספקת שפה הדומה לשפת SQL הנקראת (Hibernate Query Language (HQL, אשר מאפשרת לכתוב שאילתות דומות לשאילתות SQL כנגד אובייקטי הנתונים של הייברנייט.

entities ו-components

בז'רגון של הייברנייט, entity (יישות) הוא אובייקט עצמאי שמכניזם ה-persistence של הייברנייט יכול לטפל בו בנפרד מאובייקטים אחרים. לעומת זאת, component (רכיב) הוא אובייקט הכפוף לישויות אחרות. לדוגמה, אובייקט Album ("אלבום מוזיקה") יכול לייצג ישות, אבל אובייקטי Track ("שיר") המשויכים לאובייקטי Album ייצגו רכיבים של ישות ה"אלבום" (בהנחה שניתן לשמור או לאחזר "שירים" מבסיס הנתונים רק דרך אובייקט ה"אלבום").

ראו גם

קישורים חיצוניים