שילוב של Spanner עם Hibernate ORM (ניב GoogleSQL)

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

אפשר לשלב מסדי נתונים של ניב GoogleSQL עם Hibernate. ‫Spanner תואם ל-Hibernate ORM 6.x ו-7.x. ל-Hibernate ORM יש ניב Spanner מובנה, ויש גם ניב Hibernate ש-Google מתחזקת וזמין ב-GitHub. שני הניבים יוצרים הצהרות SQL,‏ DML ו-DDL עבור רוב סוגי הישויות והקשרים הנפוצים באמצעות הערות סטנדרטיות של Hibernate ו-Java Persistence.

שימוש בשילוב מובנה של Hibernate‏ (Hibernate ORM 7.4 ואילך)

החל מ-Hibernate ORM 7.4, ‏ Hibernate כולל ניב מובנה ל-Spanner ‏ (org.hibernate.dialect.SpannerDialect).

מומלץ להשתמש בניב המובנה הזה בפרויקטים חדשים, כי לא צריך להוסיף את התלות החיצונית google-cloud-spanner-hibernate-dialect. הדיאלקט המובנה תומך בתכונות סטנדרטיות של Hibernate. אם האפליקציה שלכם דורשת תכונות מתקדמות שספציפיות ל-Spanner, מומלץ להשתמש במקום זאת בניב חיצוני שמתוחזק על ידי Google.

כדי להשתמש בניב המובנה, מוסיפים את יחסי התלות של Maven עבור Hibernate ORM core ואת מנהל ההתקנים של Spanner JDBC לקובץ pom.xml של הפרויקט. כדי למצוא את הגרסאות העדכניות של התלויות האלה, אפשר לעיין בגרסאות של Hibernate ORM ובגרסאות של Spanner JDBC driver:

<dependencies>
  <!-- Hibernate ORM Core -->
  <dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>7.4.0.Final</version>
  </dependency>

  <!-- Cloud Spanner JDBC Driver -->
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-spanner-jdbc</artifactId>
    <version>2.40.0</version>
  </dependency>
</dependencies>

מגדירים את קובץ hibernate.properties של הפרויקט (בדרך כלל נמצא בספרייה src/main/resources) כך שישתמש ב-Spanner Dialect המובנה:

hibernate.dialect=org.hibernate.dialect.SpannerDialect
hibernate.connection.driver_class=com.google.cloud.spanner.jdbc.JdbcDriver
hibernate.connection.url=jdbc:cloudspanner:/projects/YOUR-PROJECT/instances/YOUR-INSTANCE/databases/YOUR-DATABASE

כדי לבצע אימות ב-Spanner, מנהל ההתקן של JDBC דורש פרטי כניסה. מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS לנתיב של קובץ ה-JSON של פרטי הכניסה של חשבון השירות. אחרת, מנהל ההתקן משתמש בפרטי הכניסה שמוגדרים כברירת מחדל באפליקציית gcloud Google Cloud CLI.

שימוש בניב Spanner שתחזוקתו מתבצעת על ידי Google

בפרויקטים שבהם נעשה שימוש בגרסאות קודמות של Hibernate (גרסה 6.x או גרסה 7.x לפני גרסה 7.4), או אם אתם צריכים תכונות מתקדמות שספציפיות ל-Spanner ושעדיין לא נתמכות על ידי הניב המובנה, אתם יכולים להשתמש בניב Spanner שמתוחזק על ידי Google.

התכונות המתקדמות שנתמכות בניב שמתחזקת Google כוללות:

  • היררכיות של טבלאות משולבות (@Interleaved)
  • רמזים לשאילתות, לאינדקס ולסריקה
  • קיבוץ של סכימות DDL
  • תיוג עסקאות (@TransactionTag)
  • רצפים משולבים (@PooledBitReversedSequenceGenerator)

כדי להשתמש בניב שתחזוקתו מתבצעת על ידי Google, מוסיפים את יחסי התלות של Maven לקובץ pom.xml של הפרויקט:

<dependencies>
  <!-- The Spanner JDBC driver dependency -->
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-spanner-jdbc</artifactId>
  </dependency>

  <!-- Hibernate core dependency -->
  <dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.4.4.Final</version>
  </dependency>
</dependencies>

מגדירים את קובץ hibernate.properties של הפרויקט כך שישתמש ב-Spanner Dialect וב-JDBC Driver שתחזוקתם מתבצעת על ידי Google:

hibernate.dialect=com.google.cloud.spanner.hibernate.SpannerDialect
hibernate.connection.driver_class=com.google.cloud.spanner.jdbc.JdbcDriver
hibernate.connection.url=jdbc:cloudspanner:/projects/YOUR-PROJECT/instances/YOUR-INSTANCE/databases/YOUR-DATABASE

מידע נוסף על התכונות וההמלצות של Hibernate כשמשתמשים בניב הזה זמין במסמכי העיון ב-GitHub.

המאמרים הבאים