Hibernate

**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` ייצגו רכיבים של ישות ה"אלבום" (בהנחה שניתן לשמור או לאחזר "שירים"  ממסד הנתונים רק דרך אובייקט ה"אלבום").

## ראו גם
* Persistence
* Java Persistence API
* Enterprise JavaBeans
* סריאליזציה
* Spring Framework

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

* 
* Hibernate tutorial - סדרת מדריכי וידאו באתר YouTube 

קטגוריה:Java