ההבדל בין save () ו- saveAndFlush () ב- Spring Data JPA

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

במדריך קצר זה נדון בהבדל בין ה- לשמור() ו saveAndFlush () שיטות ב- Spring Data JPA.

למרות ששתי השיטות הללו משמשות לשמירת ישויות במסד הנתונים, ישנם כמה הבדלים מהותיים.

2. יישום לדוגמא

בואו נראה תחילה כיצד להשתמש לשמור() ו saveAndFlush () שיטות עם דוגמה. כצעד ראשון, בואו ליצור מחלקת ישויות:

עובד בכיתה ציבורית @Entity {@ Id פרטי מזהה ארוך; שם מחרוזת פרטי; // בונים // סטרים וקובעים סטנדרטיים}

לאחר מכן, בואו ליצור מאגר JPA עבור פעולות ה- CRUD ב- עוֹבֵד מחלקת ישויות:

ממשק ציבורי EmployeeRepository מרחיב את JpaRepository {}

3. ה לשמור() שיטה

כפי שמתואר השם, לשמור() השיטה מאפשרת לנו שמור ישות ל- DB. זה שייך ל מאגר Crud ממשק שהוגדר על ידי Spring Data. בואו נראה איך נוכל להשתמש בזה:

workerRepository.save (עובד חדש (1L, "ג'ון"));

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

כאשר אנו משתמשים ב- לשמור() שיטה, הנתונים המשויכים לפעולת השמירה לא יוזרמו ל- DB אלא אם כן עד קריאה מפורשת ל- סומק()אוֹ לְבַצֵעַ() מתבצעת שיטה.

אם אנו משתמשים ביישומי JPA כמו Hibernate, היישום הספציפי הזה ינהל פעולות שטיפה וביצוע.

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

4. ה saveAndFlush () שיטה

בניגוד לשמור(), ה saveAndFlush () שיטה שוטף את הנתונים מיד במהלך הביצוע. שיטה זו שייכת ל מאגר Jpa ממשק של Spring Data JPA. כך אנו משתמשים בו:

workerRepository.saveAndFlush (עובד חדש (2L, "אליס"));

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

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

5. מסקנה

במאמר מהיר זה התמקדנו בהבדל בין Spring Data JPA לשמור() ו saveAndFlush () שיטות.

ברוב המקרים נשתמש ב- לשמור() שיטה. אך מדי פעם, ייתכן שנצטרך להשתמש ב- saveAndFlush () שיטה וכן למקרי שימוש ספציפיים.

כרגיל, את הדוגמה הקצרה שדנו כאן ניתן למצוא ב- GitHub.


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