צור סכימת מסדי נתונים עם JPA של Spring Data

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

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

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

ראשית, נסקור את מאפייני התצורה של JPA לייצור סכמות. לאחר מכן נבדוק כיצד להשתמש במאפיינים אלה ב- Spring Data JPA.

לבסוף נבדוק אלטרנטיבה לייצור DDL באמצעות ה- API המקורי של Hibernate.

2. דור ה- JPA Schema

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

2.1. התסריט פעולה

ראשון, כדי לשלוט אילו פקודות DDL ניצור, JPA מציגה את התסריט פעולה אפשרות תצורה:

javax.persistence.schema-generation.scripts.action

אנו יכולים לבחור מארבע אפשרויות שונות:

  • אף אחד - אינו מייצר פקודות DDL
  • לִיצוֹר - מייצר פקודות ליצירת בסיס נתונים בלבד
  • יְרִידָה - מייצר רק פקודות טיפת מסד נתונים
  • ירידה ויצירה - מייצר פקודות טיפת מסד נתונים ואחריהן פקודות

2.2. התסריט יַעַד

שנית, עבור כל סקריפט שצוין פעולהנצטרך להגדיר את המקביל יַעַד תְצוּרָה:

javax.persistence.schema-generation.scripts.create-target javax.persistence.schema-generation.scripts.drop-target

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

2.3. הסכימה מָקוֹר

לבסוף, כדי ליצור את פקודות DDL של הסכימה ממודלי היישות שלנו עלינו לכלול את הסכימה מָקוֹר תצורות עם מטא נתונים אפשרות שנבחרה:

javax.persistence.schema-generation.create-source = מטא נתונים javax.persistence.schema-generation.drop-source = מטא-נתונים

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

3. יצירת סכמות עם JPA Data Data

3.1. הדוגמנים

בואו נדמיין שאנחנו מיישמים מערכת חשבון משתמש עם ישות שנקראת חֶשְׁבּוֹן:

@Entity @Table (name = "accounts") חשבון בכיתה ציבורית {@ Id @ GeneratedValue פרטי מזהה ארוך; @Column (nullable = false, length = 100) שם מחרוזת פרטי; @Column (name = "email_address") פרטי מחרוזת emailAddress; @OneToMany (mappedBy = "חשבון", cascade = CascadeType.ALL) accountSettings פרטי רשימה רשימה חדשה (); // גטרים וקובעים}

לכל חשבון יכולות להיות הגדרות חשבון מרובות, אז הנה יהיה לנו מיפוי אחד לרבים:

@Entity @Table (name = "account_settings") מחלקת ציבור הגדרת חשבון {@Id @GeneratedValue פרטי מזהה ארוך; @Column (name = "name", nullable = false) הגדרת שם פרטי; @Column (name = "value", nullable = false) מחרוזת פרטית settingValue; @ManyToOne @JoinColumn (שם, nullable = false) חשבון פרטי פרטי; // גטרים וקובעים} 

3.2. תצורת JPA של Spring Data

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

spring.jpa.properties.javax.persistence.schema-generation.scripts.action = ליצור spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target = create.sql spring.jpa.properties.javax. persistence.schema-generation.scripts.create-source = מטא נתונים

כתוצאה מכך, Spring Data JPA מעביר מאפיינים אלה לספק ההתמדה, כאשר הוא יוצר את EntityManagerFactory אפונה.

3.3. ה create.sql קוֹבֶץ

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

צור חשבון הגדרות טבלה (id bigint לא null, שם varchar (255) לא null, ערך varchar (255) לא null, account_id bigint לא null, מפתח ראשי (id)) ליצור חשבונות טבלה (id bigint לא null, כתובת_ email כתובת varchar (255) , שם varchar (100) לא null, מפתח ראשי (id)) לשנות טבלה חשבון_הגדרות להוסיף אילוץ FK54uo82jnot7ye32pyc8dcj2eh מפתח זר (account_id) הפניות לחשבונות (id)

4. יצירת סכמות עם ממשק ה- API של שינה

אם אנו משתמשים במצב שינה, אנו יכולים להשתמש ישירות ב- API המקורי שלה, SchemaExport, כדי ליצור את פקודות DDL של הסכימה שלנו. כמו כן, ה- API של Hibernate משתמש במודלים של ישויות היישומים שלנו כדי לייצר ולייצא את סכימת מסד הנתונים.

עם מצב שינה SchemaExport אנחנו יכולים להשתמש ב- יְרִידָה, ליצור רק, ו לִיצוֹר שיטות במפורש:

MetadataSources metadataSources = MetadataSources חדש (serviceRegistry); metadataSources.addAnnotatedClass (Account.class); metadataSources.addAnnotatedClass (AccountSettings.class); מטא-נתונים מטא-נתונים = metadataSources.buildMetadata (); SchemaExport schemaExport = SchemaExport חדש (); schemaExport.setFormat (נכון); schemaExport.setOutputFile ("create.sql"); schemaExport.createOnly (EnumSet.of (TargetType.SCRIPT), מטה-נתונים);

כאשר אנו מריצים קוד זה, פקודות יצירת מסדי הנתונים שלנו מיוצאות אל ה- create.sql הקובץ בתיקיית הפרויקט הראשית שלנו.

ה SchemaExport הוא חלק מ- API של Bootstrapping ב- Hibernate.

5. אפשרויות יצירת סכמות

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

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

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

6. מסקנה

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

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


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