ביאור JPA לסוג הטקסט של PostgreSQL

1. הקדמה

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

2. סוג הטקסט ב- PostgreSQL

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

לשם כך, PostgreSQL מספק שלושה סוגי תווים:

  • CHAR (n)
  • VARCHAR (n)
  • טֶקסט

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

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

למרבה המזל, יש לנו כמה אפשרויות לניהול סוג הנתונים TEXT עבור מסד נתונים PostgreSQL:

  • אנחנו יכולים להשתמש ב- @תִלוּל ביאור
  • לחלופין, אנו יכולים גם להשתמש ב- @טור ביאור, בשילוב עם columnDefinition תְכוּנָה

בואו נסתכל על שני הפתרונות המתחילים ב- @תִלוּל ביאור.

3. @תִלוּל

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

אנו יכולים לבחור בין שני סוגים של אונות:

  • CLOB - אונת תווים המשמשת לאחסון טקסטים
  • BLOB - אונה בינארית בה ניתן להשתמש לאחסון נתונים בינאריים

אנחנו יכולים להשתמש ב- JPA @תִלוּל ביאור למיפוי שדות גדולים לסוגי אובייקט מסד נתונים גדולים.

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

נניח שיש לנו פשוט מבחן אובייקט ישות, עם תיאור שדה, שעלול להיות באורך שרירותי:

בחינה בכיתה ציבורית @Entity {@Id @GeneratedValue (אסטרטגיה = GenerationType.AUTO) פרטי מזהה ארוך; @Lob תיאור מחרוזת פרטי; } 

משתמש ב @תִלוּל ביאור בשדה התיאור, אנו מורים ל- Hibernate לנהל שדה זה באמצעות סוג PostgreSQL TEXT.

4. @טור

אפשרות נוספת לניהול סוג TEXT היא להשתמש ב- @טור ביאור, יחד עם columnDefinition תכונה.

בואו נשתמש באותו דבר מבחן התנגדות ישות שוב אך הפעם נוסיף שדה TEXT, שיכול להיות באורך שרירותי:

בחינה בכיתה ציבורית @Entity {@Id @GeneratedValue (אסטרטגיה = GenerationType.AUTO) פרטי מזהה ארוך; תיאור מחרוזת פרטי @Lob; @Column (columnDefinition = "TEXT") טקסט מחרוזת פרטי; }

בדוגמה זו אנו משתמשים בהערה @Column (columnDefinition = "TEXT"). משתמש ב columnDefinition המאפיין מאפשר לנו לציין את קטע ה- SQL שישמש בעת בניית עמודת הנתונים לסוג זה.

5. להביא את הכל ביחד

בחלק זה נכתוב בדיקת יחידה פשוטה כדי לוודא שהפתרון שלנו עובד:

@Test הציבור בטל שניתןExam_whenSaveExam_thenReturnExpectedExam () {בחינת בחינה = בחינה חדשה (); exam.setDescription ("זהו תיאור. לפעמים התיאור יכול להיות ארוך מאוד!"); exam.setText ("זה טקסט. לפעמים הטקסט יכול להיות ארוך מאוד!"); בחינה = examRepository.save (בחינה); assertEquals (examRepository.find (exam.getId ()), בחינה); }

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

כדי להדגים את הנקודה, אם נשנה במהירות את שדה התיאור שלנו מבחן יֵשׁוּת:

@Column (אורך = 20) תיאור מחרוזת פרטי; 

כאשר אנו מריצים את הבדיקה שוב נראה שגיאה:

שגיאה o.h.e.jdbc.spi.SqlExceptionHelper - ערך ארוך מדי בעמודה "VARCHAR TEXT (20)"

6. מסקנה

במדריך זה סקרנו שתי גישות לשימוש בהערות JPA בסוג ה- PostgreSQL TEXT.

התחלנו בהסבר למה משמש סוג TEXT ואז ראינו כיצד נוכל להשתמש בהערות JPA @תִלוּל ו @טור לשמור חוּט אובייקטים המשתמשים בסוג TEXT המוגדר על ידי PostgreSQL.

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


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