הגדרת אינדקסים ב- JPA

1. הקדמה

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

2. @אינדקס ביאור

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

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

עכשיו, בואו נסתכל על ההגדרה.

2.1. javax.persistence.Index

תמיכת המדדים נוספה סוף סוף במפרט JPA 2.1 על ידי javax.persistence.Index. הערה זו מאפשרת לנו להגדיר אינדקס לטבלה שלנו ולהתאים אותה בהתאם:

@Target ({}) @ שמירה (RUNTIME) אינדקס ממשק @ ממשק {שם מחרוזת () ברירת מחדל ""; טור מחרוזת (); בוליאני ייחודי () שקר ברירת מחדל; }

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

2.2. JPA לעומת שינה

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

עלינו לזכור שהתמיכה באינדקס נוספה ל- JPA באיחור רב. לפני כן, מסגרות ORM רבות תומכות באינדקסים על ידי הצגת יישום מותאם אישית משלהם, שעשוי לעבוד אחרת. גם מסגרת ההרדמה עשתה זאת והציגה את org.hibernate.annotations.Index ביאור. תוך כדי עבודה עם מסגרת זו, עלינו להיות זהירים כי הוצא משימוש מאז התמיכה במפרט JPA 2.1, ועלינו להשתמש בזו של JPA.

כעת כשיש לנו רקע טכני כלשהו, ​​נוכל לעבור על דוגמאות ולהגדיר את האינדקס הראשון שלנו ב- JPA.

3. הגדרת ה @אינדקס

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

לפני שנתחיל, עלינו לאתחל כראוי את הפרויקט שלנו ולהגדיר מודל.

בואו ליישם א סטוּדֶנט יֵשׁוּת:

@Entity @Table בכיתה ציבורית תלמידי יישומים ניתנים לסידור {@ Id @ GeneratedValue פרטי מזהה ארוך; פרטי מחרוזת firstName; שם משפחה פרטי מחרוזת; // גטרים, סטרים}

כשיש לנו את המודל שלנו, בואו נשתמש באינדקס הראשון. כל שעלינו לעשות הוא להוסיף @אינדקס ביאור. אנו עושים זאת ב @שולחן ביאור תחת אינדקסים תְכוּנָה. נזכור לציין את שם העמודה:

@Table (אינדקסים = @Index (columnList = "שם פרטי"))

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

[ראשי] DEBUG org.hibernate.SQL - צור אינדקס IDX2gdkcjo83j0c2svhvceabnnoh על סטודנט (שם ראשון)

עכשיו הגיע הזמן לשנות את ההצהרה שלנו שמציגה תכונות נוספות.

3.1. @אינדקס שֵׁם

כפי שאנו רואים, לאינדקס שלנו חייב להיות שם. כברירת מחדל, אם איננו מציינים זאת, זהו ערך שנוצר על ידי ספק. כאשר אנו רוצים לקבל תווית מותאמת אישית, עלינו פשוט להוסיף את שֵׁם תְכוּנָה:

@Index (name = "fn_index", columnList = "firstname")

גרסה זו יוצרת אינדקס עם שם מוגדר על ידי המשתמש:

[ראשי] DEBUG org.hibernate.SQL - צור אינדקס fn_index בתלמיד (שם פרטי)

יתר על כן, אנו יכולים ליצור את האינדקס שלנו בסכמה השונה על ידי ציון שם הסכימה ב- שֵׁם:

@Index (name = "schema2.fn_index", columnList = "firstname")

3.2. רב עמודות @אינדקס

עכשיו, בואו נסתכל מקרוב על ה- columnList תחביר:

עמודה :: = עמודה אינדקס [, עמודה אינדקס] * עמודה אינדקס :: = שם עמודות [ASC | DESC]

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

@Index (name = "mulitIndex1", columnList = "firstName, lastName") @Index (name = "mulitIndex2", columnList = "lastName, firstName")
[ראשי] DEBUG org.hibernate.SQL - צור אינדקס mulitIndex1 על סטודנט (שם פרטי, שם משפחה) [ראשי] DEBUG org.hibernate.SQL - צור אינדקס mulitIndex2 על סטודנט (שם משפחה, שם פרטי)

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

3.3. @אינדקס להזמין

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

@Index (שם = "mulitSortIndex", columnList = "שם פרטי, שם משפחה DESC")
[ראשי] DEBUG org.hibernate.SQL - צור אינדקס mulitSortIndex על סטודנט (שם פרטי, שם משפחה שם)

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

3.4. @אינדקס ייחודיות

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

@Index (name = "uniqueIndex", columnList = "firstName", ייחודי = נכון)
[ראשי] DEBUG org.hibernate.SQL - שינוי טבלה תלמיד הוסף אילוץ uniqueIndex ייחודי (firstName)

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

@Index (name = "uniqueMulitIndex", columnList = "firstName, lastName", unique = true)

3.5. מרובות @אינדקס על ישות יחידה

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

@Entity @Table (אינדקסים = {@Index (columnList = "firstName"), @Index (name = "fn_index", columnList = "firstName"), @Index (name = "mulitIndex1", columnList = "שם פרטי, שם משפחה" ), @Index (name = "mulitIndex2", columnList = "lastName, firstName"), @Index (name = "mulitSortIndex", columnList = "firstname, lastName DESC"), @Index (name = "uniqueIndex", columnList = "firstName", unique = true), @Index (name = "uniqueMulitIndex", columnList = "firstName, lastName", unique = true)}) מחלקה ציבורית מכשירי תלמיד

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

3.6. מפתח ראשי

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

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

3.7. אֶפֶס @אינדקס

לאחר שלמדנו דרכים שונות ליישום אינדקסים, עלינו להזכיר זאת @שולחן אינו המקום היחיד לציין אותם. באותו אופן, אנו יכולים להכריז על אינדקסים ב @SecondaryTable, @CollectionTable, @JoinTable, @TableGenerator ביאורים. דוגמאות אלה אינן מכוסות במאמר זה. לפרטים נוספים אנא עיין בכתובת javax. התמדה JavaDoc.

4. מסקנה

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

כמו תמיד, הדוגמאות מהמאמר זמינות באתר GitHub.


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