**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** בוויקישיתוף
* אתר האינטרנט הרשמי של Hibernate (באנגלית)
* Hibernate tutorial - סדרת מדריכי וידאו באתר YouTube (באנגלית)

  


| Java (פלטפורמת תוכנה) |
| --- |
| פלטפורמה | Java (שפת תכנות) • Java Card • Java ME • Java EE • Java SE • Java Virtual Machine |  |
| טכנולוגיות | Java applet • Java Web Start • Java Servlet • JavaServer Pages • JavaFX • JavaServer Faces |
| מושגים | איסוף זבל • Cross-platform • Java Bytecode • Java Development Kit • Javadoc • Java Classloader • Java Class Library 
JIT Compiler • HotSpot • JavaBeans • Enterprise JavaBeans • JNI • JAR • POJO • Web container • Java annotation 
Java package • Java Class File |
| ממשקי תכנות יישומים | Swing • AWT • SWT • Java 3D • Java 2D • JMS • JDBC • JAXP • JPA • RMI • JNDI |
| שפות ל-JVM | Scala • Clojure • Groovy • JRuby • Jython |
| תשתיות תוכנה וכליםשל חברות צד שלישי | אפאצ'י טומקט‏ • Apache Maven • Apache Ant • Apache Struts
JUnit • Hibernate • Spring Framework • JBoss • Google Web Toolkit • BEA WebLogic • IBM WebSphere |
| סביבות פיתוח משולבות | Eclipse • NetBeans • IntelliJ |
| חברות | סאן מיקרוסיסטמס • אורקל |
| אישים | ג'יימס גוסלינג • ביל ג'וי • אריק שמידט |

|  |  |
| --- | --- |
| בקרת זהויות עריכת הנתון בוויקינתונים | 
* GND: 4785089-9

 |