في JPA 2.0 ، يمكننا استخدام EntityManager.CreateNativeQuery () لتنفيذ عبارات SQL الأصلية. ولكن عندما لا تحتوي نتيجة الاستعلام على فئة كيان مقابلة ، فإن Query.GetResultList () تُرجع قائمة <Object []>. وهذا يعني ، يتم إرجاع بيانات كل صف كصفيف كائن.
الاستخدام الشائع هو:
public void testnativeQuery () {query query = entityManager.CreateNaTiveQuery ("SELECT id ، name ، age from t_user") ؛ قائمة الصفوف = Query.GetResultList () ؛ لـ (صف الكائن: الصفوف) {object [] cells = (object []) row ؛ system.out.println ("id =" + cells [0]) ؛ system.out.println ("name =" + cells [1]) ؛ System.out.println ("Age =" + Cells [2]) ؛ }}بهذه الطريقة ، سيجعل الكود صعبًا للغاية. ما هو بالضبط عنصر مع مجموعة من 0؟ لا يُعرف ما إذا كنت لا تحسب بيان الاستعلام. علاوة على ذلك ، بمجرد ضبط بيان الاستعلام ، يجب أيضًا تعديل رمز Java معًا. في هذا الوقت ، نعتقد أنه إذا تم إرجاع الخريطة ، فسيكون ذلك أكثر وضوحًا للاستخدام.
لسوء الحظ ، لا توفر واجهة برمجة تطبيقات JPA مثل هذا الإعداد. في الواقع ، تدعم العديد من تطبيقات JPA الكامنة كائنات خريطة العودة.
على سبيل المثال:
Query.Sethint Eclipselink (queryhints.result_type ، resulttype.map) ؛ Hibernate's .setResultTransformer (transformers.alias_to_entity_map) ؛
لذلك ، إذا أردنا إعادة الخريطة وتحديد أن الطبقة الأساسية تستخدم تطبيق JPA معين ، فيمكننا اتخاذ الخطوة التالية والتضحية بميزات التنفيذ المتبادل لتلبية احتياجاتنا:
public void testnativeQuery () {query query = entityManager.CreateNaTiveQuery ("SELECT id ، name ، age from t_user") ؛ query.unwrap (sqlquery.class) .SetResultTransformer (transformers.alias_to_entity_map) ؛ قائمة الصفوف = Query.GetResultList () ؛ لـ (Object OBJ: Rows) {map row = (map) obj ؛ System.out.println ("id =" + row.get ("id")) ؛ System.out.println ("name =" + row.get ("name")) ؛ System.out.println ("Age =" + Row.get ("Age")) ؛ }}يستعرض الاستعلام طريقة الكتابة لنوع إرجاع الكيان المحدد
Query Query = entityManager.CreateNistileQuery ("SELECT ID ، NAME ، AGE FROM T_USER" ، user.class) ؛تجدر الإشارة هنا إلى أن استخدام الخريطة هو بالتأكيد أقل كفاءة من استخدام صفائف الكائنات. لذلك عليك معرفة ما إذا كان انخفاض الأداء ضمن النطاق المقبول. بعد ذلك ، في بيئة 4.2.x السطحية ، بغض النظر عما إذا كنت تكتب أحرف رأس المال أو الحروف الصغيرة في SQL الأصلي ، يتم رسملة أسماء الحقول التي تم إرجاعها. بالطبع ، يمكنك معالجة أسماء الحقول بطريقة معينة عن طريق تخصيص ResultTransformer ، وحتى إعادة Pojo التي تحتاجها.
الطريقة أعلاه للسماح لكائن خريطة استعلام استعلام JPA هي كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.