@DynamicUpdate עם Spring Data JPA

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

כאשר אנו משתמשים ב- Spring Data JPA עם Hibernate, אנו יכולים להשתמש גם בתכונות הנוספות של Hibernate. @DynamicUpdate הוא תכונה כזו.

@DynamicUpdate היא הערה ברמה כיתתית שניתן להחיל על ישות JPA. זה מבטיח ש- Hibernate ישתמש רק בעמודות ששונו בהצהרת SQL שהוא מייצר לצורך עדכון ישות.

במאמר זה, נסתכל על ה- @DynamicUpdate ביאור, בעזרת א אביב נתונים JPA דוגמא.

2. JPA @יֵשׁוּת

כאשר יישום מתחיל, מצב שינה יוצר את הצהרות SQL עבור פעולות CRUD של כל הישויות. הצהרות SQL אלה נוצרות פעם אחת ונשמרות במטמון בזיכרון כדי לשפר את הביצועים.

משפט עדכון SQL שנוצר כולל את כל העמודות של ישות. במקרה שאנו מעדכנים ישות, ערכי העמודות שהשתנו מועברים להצהרת עדכון SQL. בעמודות שאינן מעודכנות, מצב שינה משתמש בערכים הקיימים שלהם לצורך העדכון.

בואו ננסה להבין זאת בדוגמה. ראשית, נבחן ישות JPA בשם חֶשְׁבּוֹן:

חשבון בכיתה ציבורית @Entity {@ Id מזהה פרטי פרטי; @Column פרטי שם מחרוזת; @Column סוג מחרוזת פרטי; @Column פרטית בוליאנית פעילה; // גטרס וסטרים}

לאחר מכן, בוא נכתוב מאגר JPA עבור ה- חֶשְׁבּוֹן יֵשׁוּת:

ממשק ציבורי @ מאגר @ AccountRepository מרחיב את JpaRepository {}

כעת נשתמש ב- מאגר חשבון לעדכן את שֵׁם שדה של חֶשְׁבּוֹן לְהִתְנַגֵד:

חשבון חשבון = accountRepository.findOne (ACCOUNT_ID); account.setName ("חשבון בדיקה"); accountRepository.save (חשבון);

לאחר שנבצע עדכון זה, נוכל לאמת את הצהרת SQL שנוצרה. משפט SQL שנוצר יכלול את כל העמודות של חֶשְׁבּוֹן:

עדכן ערכת חשבון פעילה = ?, שם = ?, סוג =? איפה id =?

3. JPA @יֵשׁוּת עם @DynamicUpdate

ראינו את זה למרות ששינינו את שֵׁם בשדה בלבד, מצב שינה כולל את כל העמודות בהצהרת SQL.

עכשיו, בואו נוסיף את ה- @DynamicUpdate ביאור ל חֶשְׁבּוֹן יֵשׁוּת:

@Entity @DynamicUpdate חשבון בכיתה ציבורית {// נתונים ושיטות קיימות}

לאחר מכן, בואו נפעיל את אותו קוד עדכון בו השתמשנו בחלק הקודם. אנו יכולים לראות כי ה- SQL שנוצר על ידי Hibernate, במקרה זה, כולל רק את ה- שֵׁם טור:

עדכן את שם קבוצת החשבון =? איפה id =?

כך, מה קורה כשאנחנו משתמשים @DynamicUpdate על ישות?

למעשה, כאשר אנו משתמשים @DynamicUpdate בישות, מצב שינה אינו משתמש בהצהרת SQL במטמון לצורך העדכון. במקום זאת, הוא ייצור משפט SQL בכל פעם שאנחנו מעדכנים את היישות. זֶה SQL שנוצר כולל רק את העמודות שהשתנו.

על מנת לגלות את העמודות שהשתנו, Hibernate צריך לעקוב אחר מצב הישות הנוכחית. לכן, כאשר אנו משנים שדה כלשהו של ישות, הוא משווה את המצבים הנוכחיים והמצויים של הישות.

זה אומר ש @DynamicUpdate יש תקורה לביצועים המשויכת אליו. לכן, עלינו להשתמש בו רק כאשר הדבר נדרש בפועל.

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

4. מסקנה

במדריך זה בדקנו את @DynamicUpdate ביאור למצב שינה. השתמשנו בדוגמה של Spring Data JPA כדי לראות @DynamicUpdate בִּפְעוּלָה. כמו כן, דנו מתי עלינו להשתמש בתכונה זו ומתי לא.

כמו תמיד, דוגמאות הקוד המלאות המשמשות במדריך זה זמינות באתר Github.