שאילתות קריטריונים באמצעות JPA Metamodel

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

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

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

2. מדוע ה- JPA Metamodel?

לעתים קרובות, כשאנחנו כותבים שאילתת קריטריונים, עלינו להפנות לשיעורי ישויות ולתכונות שלהם.

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

ראשית עלינו לחפש את שמות תכונות הישות. ובמקרה שמשנה שם עמודה בהמשך מחזור החיים של הפרויקט, עלינו לשקף מחדש כל שאילתה בה נעשה שימוש בשם.

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

3. מחלקת ישויות

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

ראשית, בואו נסתכל על שלנו סטוּדֶנט מעמד:

@Entity @Table (name = "students") סטודנט בכיתה ציבורית {@ Id @ GeneratedValue (אסטרטגיה = GenerationType.AUTO) מזהה פרטי פרטי; @Column (name = "first_name") פרטי מחרוזת שם פרטי; @Column (name = "last_name") שם משפחה פרטי מחרוזת; @Column (name = "grad_year") פרטי int gradYear; // סטרים וקובעים סטנדרטיים}

4. יצירת שיעורי JPA Metamodel

בשלב הבא עלינו ליצור את שיעורי המטא-מודל ולצורך זה נשתמש בכלי מחולל המטא-מודל המסופק על ידי JBoss. JBoss הוא רק אחד מהכלים הרבים הזמינים להפקת המטאמודל. כלים מתאימים אחרים כוללים EclipseLink, OpenJPA ו- DataNucleus.

כדי להשתמש בכלי JBoss, עלינו להוסיף את התלות האחרונה שלנו pom.xml הקובץ, והכלי יפיק את הכיתות metamodel ברגע שנפעיל את הפקודה maven build:

 org.hibernate hibernate-jpamodelgen 5.3.7.Final 

שימו לב, אנחנו צריכים תוסיף את ה יעד / מחלקות שנוצרו התיקיה לשביל הכיתה של ה- IDE שלנו, כברירת מחדל, הכיתות ייווצרו בתיקיה זו בלבד.

5. שיעורים סטטי JPA Metamodel

בהתבסס על מפרט ה- JPA, מחלקה שנוצרה תישאר באותה חבילה כמו מחלקת הישויות המתאימה ותקבל שם זהה עם תוספת "_" (קו תחתון) בסוף. כך, מחלקת המטא-מודלים שנוצרה עבור סטוּדֶנט הכיתה תהיה סטוּדֶנט_וייראה משהו כמו:

@Generated (value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor") @StaticMetamodel (Student.class) מעמד מופשט ציבורי Student_ {public static volatile SingularAttribute firstName; שם ציבורי סטטי הפכפך סטטי. שם משפחה; מזהה סטטי ציבורי סטטי נדיף; סטטי ציבורי נדיף SingularAttribute gradYear; גמר סטטי ציבורי מחרוזת FIRST_NAME = "שם פרטי"; גמר סטטי ציבורי מחרוזת LAST_NAME = "lastName"; סופי סטטי ציבורי מחרוזת מזהה = "id"; גמר סטטי ציבורי מחרוזת GRAD_YEAR = "gradYear"; }

6. שימוש בשיעורי JPM Metamodel

אנו יכולים להשתמש בשיעורי המטא-מודל הסטטיים באותו אופן בו היינו משתמשים ב- חוּט הפניות לתכונות. ממשק ה- API של שאילתת הקריטריונים מספק שיטות עמוסות המקבלות חוּט הפניות וכן תְכוּנָה יישומי ממשק.

בואו נסתכל על שאילתת הקריטריונים שתביא את הכל סטודנטים שסיים את לימודיו בשנת 2015:

// קוד הגדרת הפעלה CriteriaBuilder cb = session.getCriteriaBuilder (); CriteriaQuery criteriaQuery = cb.createQuery (Student.class); שורש שורש = criteriaQuery.from (Student.class); criteriaQuery.select (root) .where (cb.equal (root.get (Student_.gradYear), 2015)); שאילתת שאילתה = session.createQuery (criteriaQuery); תוצאות רשימה = query.getResultList ();

שימו לב כיצד השתמשנו ב- סטודנט_.גרד שנה התייחסות במקום להשתמש בקונבנציונאלי שנת סיום הלימודים שם עמודה.

7. מסקנה

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

קוד המקור של מדריך זה ניתן למצוא באתר Github.


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