לאחרונה כתבתי הרבה מדריכי Hibernate. Hibernate הוא אחד מכלי ORM הטובים ביותר בשוק כרגע. לכן, הפוסט הזה הוא כמו אינדקס לכל הפוסטים הקשורים למדריכי Hibernate ודוגמאות. ניתן לעבור דרך מדריכי Hibernate אלו בסדר כדי ללמוד את Hibernate מההתחלה. יש גם סיכוי גדול שאני אוסיף עוד מדריכים לרשימה, אז כדאי לך לשים לב ולבדוק מדי פעם.
מדריך Hibernate
- מדריך Hibernate למתחילים Hibernate תומך בהערות JPA והוא מאוד גמיש. אנו יכולים להגדיר אותו באמצעות XML, קבצי תצורה וגם באמצעות קוד. מדריך זה הוא דרך נהדרת להתחיל עם מסגרת Hibernate. המדריך מתמקד בהגדרות שונות הנדרשות ל-Hibernate ומספק דוגמאות למיפוי פשוט עם XML וגם מיפוי באמצעות הערות JPA. תלמד גם דרכים שונות לאתחל את
SessionFactory
ורכיבים חשובים במסגרת Hibernate. - מיפוי יחס חד לאחד ב-Hibernate
ברוב המקרים, טבלאות במסד נתונים מקושרות זו לזו. ישנם הרבה סוגי קשרים – יחס חד לאחד, יחס חד לרבים ויחס רבים לרבים הם ברמה הרחבה, וניתן לחלקם עוד יותר למיפויים אחד-כיווניים ודו-כיווניים. במדריך זה תופיע הסבר על איך לממש מיפוי יחס חד לאחד באמצעות תצורת XML וגם באמצעות תצורת הערות JPA. -
מיפוי יחס חד לרבים ב-Hibernate
במונחים פשוטים, מיפוי יחס חד לרבים אומר ששורה אחת בטבלה יכולה להתמפת למספר שורות בטבלה אחרת. לדוגמה, חשבון של עגלה (Cart) יכול להכיל מספר פריטים (Items), ולכן יש לנו כאן מיפוי יחס חד לרבים. במדריך זה תלמד כיצד לממש מיפוי יחס חד לרבים באמצעות תצורת XML ולאחר מכן באמצעות הערות Hibernate. -
מיפוי יחס רבים לרבים ב-Hibernate
מיפוי יחס רבים לרבים נכנס לשימוש בדרך כלל במסד נתונים באמצעות טבלת התמצאות (Join Table). לדוגמה, ייתכן ויהיה לנו טבלת עגלות (Cart) וטבלת פריטים (Item), וטבלת Cart_Items למיפוי רבים לרבים. כל עגלה יכולה לכלול מספר פריטים, וכל פריט יכול להיות חלק ממספר עגלות, כך שיש לנו כאן מיפוי יחס רבים לרבים. מדריך זה מסביר על מיפוי רבים לרבים בהיברנייט, כולל מיפוי יחס חד-כיווני ודו-כיווני. - שפת שאילתת Hibernate (HQL) הגיש החילוני מגיע עם שפת שאילתת מופעלת – שפת שאילתת Hibernate (HQL). היא דומה מאוד ל־SQL, עם ההבחנה שאנו משתמשים באובייקטים במקום בשמות טבלאות, וזה יוצר קרבה יותר לתכנות מונחה עצמים. מאמר זה מסביר על HQL ועל סעיפים שונים שנתמכים בשפת HQL.
- שאילתת SQL טבעית של Hibernate Hibernate מספק אפשרות לביצוע שאילתות SQL טבעיות דרך שימוש באובייקט SQLQuery. זה מאוד שימושי כאשר רוצים לבצע שאילתות ספציפיות למסד הנתונים שאינן נתמכות על ידי API של Hibernate, כגון רמזי שאילתה או המילה המפתח CONNECT במסד נתונים של Oracle.
- שאילתת שם Hibernate אם יש הרבה שאילתות HQL או Native SQL, הן עשויות לגרום לבלבול בקוד מכיוון שכל השאילתות יהיו מתפזרות בפרויקט. לכן Hibernate מספקת שאילתות בשם שניתן להגדיר במקום מרכזי ולהשתמש בהן בכל מקום בקוד. אפשר ליצור שאילתות בשם לשני סוגים – HQL ו־Native SQL. שאילתות בשם של Hibernate ניתן להגדיר בקובץ המיפוי של Hibernate באמצעות האלמנטים
query
אוsql-query
, או דרך שימוש בהערות JPA @NamedQuery ו־@NamedNativeQuery. - Hibernate קריטריונים Hibernate מספק API קריטריונים המבוסס על אובייקטים יותר לשאילתת מסד הנתונים ולקבלת תוצאות. אין אפשרות להשתמש ב-Criteria כדי להריץ שאילתות עדכון או מחיקה או כל פעולות DDL אחרות. הוא משמש רק למשיכת התוצאות ממסד הנתונים באמצעות גישה יותר מבוססת על אובייקטים. חלק משימושי ה- API קריטריונים הנפוצים הם השקפה שניתן להשתמש בה עבור פונקציות אגרגט כמו sum(), min(), max() וכו ', ProjectionList למשיכת עמודות נבחרות בלבד, לסדר את התוצאות וכו'.
- מטמון הראשון של Hibernate מטמון Hibernate יכול להיות מאוד שימושי בהשגת ביצועי אפליקציה מהירים אם משתמשים בו בצורה נכונה. הרעיון מאחורי המטמון הוא להפחית את מספר השאילתות לבסיס הנתונים, ולכן להפחית את זמן העברת הנתונים באפליקציה. מטמון הראשון של Hibernate משויך לאובייקט ה-Session. מטמון הראשון של Hibernate מופעל כברירת מחדל ואין דרך לנטרל אותו. עם זאת, Hibernate מספקת שיטות דרך כן שניתן למחוק אובייקטים נבחרים מהמטמון או לנקות את המטמון לחלוטין. כל אובייקט שמאוחסן בסשן לא יהיה גלוי לסשנים אחרים וכאשר הסשן נסגר, כל האובייקטים המאוחסנים גם יאבדו.
- הונטיברייט זיכרון מדור שני עם EHCache ספקי זיכרון מדור שני של הונטיברייט כוללים את EHCache ו-Infinispan, אך EHCache פופולרי יותר משום שקל לאינטגרציה ותומך בכל אסטרטגיות המטמון של הונטיברייט. מדריך זה מספק דוגמה מלאה לאינטגרציה של EHCache עם מסגרת הונטיברייט.
- הונטיברייט get נגד load הונטיברייט Session מספקת שיטות שונות להבאת נתונים ממסד נתונים. שתיים מהן הן – get() ו-load(). יש גם הרבה שיטות מותאמות אישית לאלה, שניתן להשתמש בהם בנסיבות שונות. במבט ראשון שני get() ו-load() נראים דומים מאחר ושניהם מביאים את הנתונים ממסד הנתונים. עם זאת, ישנם מספר הבדלים ביניהם, מדריך זה מסביר עליהם עם קוד דוגמה.
- הונטיברייט save נגד persist הונטיברייט Session הוא הממשק בין היישום ה-Java ומסגרת הונטיברייט. מדריך זה מסביר על שיטות חשובות של המסגרת לשמירה ועדכון נתונים בטבלאות – save, saveOrUpdate, persist, update ו-merge.
- פתיחת סשן של Hibernate vs. getCurrentSession
SessionFactory של Hibernate היא מחלקת המפענח שבאמצעותה אנו משיגים סשנים ובוצעים פעולות מסד נתונים. SessionFactory של Hibernate מספקת שלושה שיטות שבאמצעותן ניתן לקבל אובייקט Session – getCurrentSession(), openSession() ו-openStatelessSession(). במדריך זה מתארים על כל אחת מהן עם קוד דוגמה. -
אינטגרצית Hibernate עם log4j
Hibernate 4 משתמש ב-JBoss logging אך log4j הוא הספרייה ללוגים הפופולרית ביותר. מדריך מהיר המסביר כיצד לאינטגרט תיעוד log4j עם מסגרת ה-Hibernate. -
דוגמה של Hibernate Tomcat JNDI DataSource
ברוב הפעמים מסגרת Hibernate משמשת ביישומי אינטרנט שרצים ב-Tomcat או בכל מארח שרתים סרבלי אחר. Hibernate יכול להשתמש במקור הנתונים שהוגדר כמשאב JNDI בתוך התיקייה, זהו הגישה המועדפת לאפשר לתיקיית השרת לנהל את חיבורי המסד נתונים באמצעות בריכת חיבורים. -
אינטגרציה של Spring עם Hibernate
Spring הוא אחד מהספריות הנפוצות ביותר ל-Java EE ו-Hibernate הוא המסגרת ORM הפופולרית ביותר. לכן, קיבוץ ההרכב של Spring Hibernate משמש הרבה ביישומי עסקים. המדריך הזה משתמש ב-Spring 4 ומשתמש בו באינטגרציה עם Hibernate 3 ולאחר מכן מעדכן את אותו הפרויקט להשתמש ב-Hibernate 4. - דוגמת Spring MVC Hibernate המדריך הזה ממשיך ומסביר כיצד לשלב את Hibernate עם Spring MVC ולהשתמש בניהול עסקאות דיקלרטיבי של Spring, במקום להשתמש בניהול עסקאות של היברנייט.
- דוגמת שילוב Struts2 Hibernate המדריך הזה מסביר את הדרך הכללית לשלב את Hibernate עם כל יישום אינטרנטי דרך שימוש ב-ServletContextLister, הדוגמה משתמשת ב-Struts2 עם Hibernate אך מאחורי הקלעים השילוב נעשה באמצעות טכנולוגיית Servlet בלבד. זה שונה מהשילוב של Spring מאחר ו-Struts2 לא מספק תמיכה מובנית בשילוב עם היברנייט.
- דוגמת Hibernate Validator אימות נתונים הוא חלק חיוני מכל יישום. זהו משימה חותכת שקורה בשכבת ההצגה, בשכבת העסקים וגם בשכבת התמיכה. לכן JSR-303 מספקת תקן מבוסס הערות להחיל אימות על מאפייני החלוקה של Java Bean. Hibernate Validator מספק תמיכה עבור JSR-303 והמדריך הזה מציג את שימושו בדוגמה פשוטה.
- תוסף Eclipse של כלי Hibernate אם עבדת על פרויקטי Hibernate, כנראה שאתה מכיר הרבה מאפיינים שאנו צריכים עבור מיפוי וקובץ התצורה של Hibernate. בלעדי כלי נכון שיכול להדריך אותנו בחיפוש אחר מאפיינים נכונים, זה יכול להפוך לקשה מאוד להגדיר בצורה נכונה את היישום שלנו. הזמן בו כלי Hibernate תוסף Eclipse משתמש והוא חיוני וחייב לפרויקטי Hibernate.
- שאלות ראיון ב-Hibernate לקבלת ידע טוב בגבי הגישה ה-Hibernate היא יתרון בראיונות עבודה בתחום Java, לכן כתבתי את הפוסט הזה. הוא מכיל את רוב השאלות החשובות הקשורות לגישה ה-Hibernate עם תשובות מפורטות. כדאי לעבור עליהם לפני הריון כדי לשדרג את הידע שלך.
מדריך Hibernate – תיקוני שגיאות נפוצים
- איך להגדיר את hibernate.cfg.xml כדי לעבוד במצב לא מקוון
- org.hibernate.AnnotationException: אין זיהוי מסודר עבור ישות המחלקה
- org.hibernate.HibernateException: get אינו חוקי ללא עסקה פעילה
- org.hibernate.HibernateException: לא הוגדר CurrentSessionContext
- התוכנית Hibernate אינה סופית
- גישה ל-DialectResolutionInfo לא יכולה להיות ריקה כאשר 'hibernate.dialect' לא מוגדר
Source:
https://www.digitalocean.com/community/tutorials/hibernate-tutorial