מדריך ל- OGM במצב שינה

1. סקירה כללית

במדריך זה נעבור את היסודות של אובייקט שינה / Mapper Grid (OGM).

OGM Hibernate מספק תמיכה ב- Java Persistence API (JPA) עבור מאגרי נתונים NoSQL. NoSQL הוא מונח מטריה המכסה מגוון רחב של אחסון נתונים. לדוגמה, זה כולל מאגרי נתונים בעלי ערך מפתח, מסמך, עמוד וממוקד גרף.

2. הארכיטקטורה של OGM במצב שינה

Hibernate מציע באופן מסורתי מנוע מיפוי יחסי אובייקט (ORM) למאגרי מידע יחסיים. מנוע OGM למצב תרדמה מרחיב את הפונקציונליות שלו כדי לתמוך בחנויות נתונים NoSQL. היתרון העיקרי בשימוש בו הוא העקביות של ממשק JPA בין מאגרי נתונים יחסיים ו- NoSQL.

OGM Hibernate מסוגל לספק הפשטה על פני מספר מאגרי נתונים NoSQL בגלל שני ממשקי מפתח, DatastoreProvider ו רשת דיאלקט. לכן, כל חנות נתונים חדשה NoSQL בה היא תומכת מגיעה עם יישום של ממשקים אלה.

נכון להיום הוא אינו תומך בכל מאגרי הנתונים של NoSQL, אך הוא מסוגל לעבוד עם רבים מהם כמו אינפיניספאן ו- Ehcache (ערך-מפתח), MongoDB ו- CouchDB (מסמך) ו- Neo4j (גרף).

זה גם תומך באופן מלא בעסקאות ויכול לעבוד עם ספקי JTA סטנדרטיים. ראשית, ניתן לספק זאת דרך מיכל ה- EE של ג'קרטה ללא כל תצורה מפורשת. יתר על כן, אנו יכולים להשתמש במנהל עסקאות JTA עצמאי כמו Narayana בסביבת Java SE.

3. התקנה

לצורך הדרכה זו, נשתמש ב- Maven כדי למשוך את התלות הנדרשת לעבודה עם OGM ב- Hibernate. נשתמש גם ב- MongoDB.

להבהרה, בוא נראה כיצד להגדיר אותם להדרכה.

3.1. תלות Maven

בואו נראה את התלות הנדרשת לעבודה עם OGM Hibernate ו- MongoDB:

 org.hibernate.ogm Hibernate-ogm-mongodb 5.4.0.Final org.jboss.narayana.jta narayana-jta 5.9.2.Final 

כאן אנו משיגים תלות נדרשת דרך Maven:

  • ניב OGM במצב שינה עבור MongoDB
  • מנהל העסקאות נראיאנה (ספק ה- JTA בפועל)

3.2. יחידת התמדה

נצטרך גם הגדר פרטי מאגר נתונים במצב שינה persistance.xml:

 org.hibernate.ogm.jpa.HibernateOgmPersistence 

שימו לב להגדרות שסיפקנו כאן:

  • הערך של סוג העסקה של התכונה כ- "JTA" (זה מרמז שאנחנו רוצים מנהל ישות JTA מה- EntityManagerFactory)
  • הספק, כלומר HibernateOgmPersistence ל- OGM ב- Hibernate
  • כמה פרטים נוספים הקשורים ל- DB (אלה בדרך כלל משתנים בין מקורות נתונים שונים)

התצורה מניחה ש- MongoDB פועל ונגיש כברירת מחדל. אם זה לא המקרה, תמיד נוכל לספק פרטים לפי הצורך. אחד המאמרים הקודמים שלנו מכסה גם את הגדרת MongoDB בפירוט.

4. הגדרת ישות

עכשיו אחרי שעברנו את היסודות, בואו נגדיר כמה ישויות. אם עבדנו בעבר עם ORM או JPA ב- Hibernate, אין לזה עוד מה להוסיף. זו הנחת היסוד של OGM ב- Hibernate. זה מבטיח לתת לנו לעבוד עם חנויות נתונים מסוג NoSQL שונות עם הידע של JPA בלבד.

לצורך הדרכה זו נגדיר מודל אובייקט פשוט:

זה מגדיר מאמר, מְחַבֵּר ו עוֹרֵך שיעורים יחד עם מערכות היחסים שלהם.

בואו נגדיר אותם גם ב- Java:

מאמר בכיתה ציבורית @Entity {@Id @GeneratedValue (generator = "uuid") @GenericGenerator (name = "uuid", strategy = "uuid2") מאמר מחרוזת פרטי; מאמר מחרוזת פרטי כותרת; מחבר פרטי מחבר @ManyToOne; // בונים, גטרים וקובעים ...}
@Entity class class מחבר {@Id @GeneratedValue (מחולל = "uuid") @GenericGenerator (שם = "uuid", אסטרטגיה = "uuid2") פרטי מחרוזת מחרוזת; פרטי מחרוזת authorName; עורך עורך פרטי @ManyToOne; @OneToMany (mappedBy = "author", cascade = CascadeType.PERSIST) קבוצה פרטית authoredArticles = HashSet חדש (); // בונים, גטרים וקובעים ...}
עורך המחלקה הציבורית @Entity {@Id @GeneratedValue (generator = "uuid") @GenericGenerator (name = "uuid", strategy = "uuid2") עורך מחרוזות פרטי; עורך מחרוזת פרטי; @OneToMany (mappedBy = "עורך", cascade = CascadeType.PERSIST) קבוצה פרטית allocAuthors = HashSet חדש (); // בונים, גטרים וקובעים ...}

הגדרנו כעת מחלקות ישויות והערנו אותם בהערות סטנדרטיות של JPA:

  • @יֵשׁוּת להקים אותם כישויות JPA
  • @תְעוּדַת זֶהוּת כדי ליצור מפתחות ראשיים עבור הישויות עם UUID
  • @אחד לרבים ו @ManyToOne ליצור קשרים דו כיווניים בין הישויות

5. פעולות

עכשיו כשיצרנו את היישויות שלנו, בואו נראה אם ​​נוכל לבצע פעולות מסוימות בהן. כצעד ראשון, נצטרך ליצור נתוני בדיקה. הנה, ניצור עוֹרֵך, כמה מְחַבֵּר, וכמה מאמר. אנו גם נקבע את מערכות היחסים ביניהם.

לאחר מכן, לפני שנוכל לבצע פעולה כלשהי, נצטרך מופע של EntityManagerFactory. אנחנו יכולים להשתמש בזה כדי ליצור EntityManager. יחד עם זה, עלינו ליצור TransactionManager לטפל בגבולות העסקה.

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

חלל פרטי persistTestData (EntityManagerFactory entityManagerFactory, עורך עורך) זורק Exception {TransactionManager transactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager (); transactionManager.begin (); EntityManager entityManager = entityManagerFactory.createEntityManager (); entityManager.persist (עורך); entityManager.close (); transactionManager.commit (); }

הנה, אנו משתמשים EntityManager להחזיק מעמד את ישות השורש, הנמשכת לכל קשריה. אנו מבצעים פעולה זו גם בגבול עסקאות מוגדר.

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

@Test הציבור בטל givenMongoDB_WhenEntitiesCreated_thenCanBeRetrieved () זורק חריג {EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory ("ogm-mongodb"); עורך עורך = createTestData (); persistTestData (entityManagerFactory, עורך); TransactionManager transactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager (); transactionManager.begin (); EntityManager entityManager = entityManagerFactory.createEntityManager (); עורך loadedEditor = entityManager.find (Editor.class, editor.getEditorId ()); assertThat (loadedEditor) .isNotNull (); // טענות אחרות לאימות הגופים והיחסים}

הנה, אנו משתמשים ב- EntityManager שוב כדי למצוא את הנתונים ולבצע קביעות סטנדרטיות לגביהם. כאשר אנו מבצעים בדיקה זו, היא מיידית את מאגר הנתונים, ממשיכה את הישויות, מאחזרת אותן בחזרה ומאמתת.

שוב, אנחנו פשוט השתמש ב- JPA כדי להחזיק את הישויות יחד עם מערכת היחסים שלהם. בדומה לכך, אנו משתמשים ב- JPA כדי לטעון את הישויות בחזרה והכל עובד בסדר, גם כאשר בחירת מסד הנתונים שלנו היא MongoDB במקום מסד נתונים יחסי מסורתי.

6. החלפת גב גב

אנחנו יכולים גם להחליף את גבנו. בואו נגלה עכשיו כמה קשה יהיה לעשות זאת.

נשנה את ה- backend שלנו ל- Neo4j, שבמקרה הוא חנות נתונים פופולארית מוכוונת גרפים.

ראשית, בואו נוסיף את התלות של Maven עבור Neo4j:

 org.hibernate.ogm Hibernate-ogm-neo4j 5.4.0.Final 

לאחר מכן נצטרך להוסיף את יחידת ההתמדה הרלוונטית שלנו התמדה.קסמל:

 org.hibernate.ogm.jpa.HibernateOgmPersistence 

בקיצור, אלה התצורות הבסיסיות ביותר הנדרשות ל- Neo4j. ניתן לפרט זאת בהמשך כנדרש.

ובכן, זה פחות או יותר מה שצריך לעשות. כאשר אנו מבצעים את אותה הבדיקה עם Neo4j כמו חנות הנתונים של backend, זה עובד בצורה חלקה למדי.

שים לב שהעברנו את ה- backend שלנו מ- MongoDB, שבמקרה מדובר במאגר נתונים מכוון מסמך, ל- Neo4j, שהוא מאגר נתונים מונחה גרף. ועשינו את כל זה בשינויים מינימליים ובלי להזדקק לשינויים באף אחת מהפעולות שלנו.

7. מסקנה

במאמר זה עברנו את היסודות של OGM Hibernate, כולל הארכיטקטורה שלו. בהמשך, יישמנו מודל תחום בסיסי וביצענו פעולות שונות תוך שימוש ב- DB שונים.

כמו תמיד, הקוד לדוגמאות זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found