كيفية بناء استفسارات JDD بشكل حيوي على معلمات متعددة
-
06-09-2019 - |
سؤال
يمكن للمرء استخدام بناء جملة JDD بسهولة للاستعلام على معلمات متعددة على النحو التالي:
//specify the persistent entity you're querying and you filter usign params
query = pm.newQuery(MyClass.class, " customer == paramCustomer && date >= paramStartDate && date <=paramEndDate ");
// declare params used above
query.declareParameters("com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate");
//pass the object declared as params
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);
انها واضحة لبناء سلسلة برمجيا مع مرشح:
"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"
ومشتقل آخر مع إعلان المعالم:
"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"
ما لم يكن الفوري هو التوصل إلى استراتيجية لتنفيذ الاستعلام اعتمادا على المعارف الموجودة في المرشح (وتم إعلانها)، لذلك في نهاية المطاف مع عدد من البيانات القبيحة والمصحة المخصصة بالفعل إذا كان الأمر كذلك التباديل الممكنة لتنفيذ الاستعلام (جميع المعارف، فقط الأول، فقط الثاني، الأول والثاني وغيرها ...):
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);
أنا متأكد من أن هذه مهمة شائعة وشخص آخر يفعله بطريقة أكثر عمومية وفعالة.
أي اقتراح؟
المحلول
لقد وجدت حلا في الطريقة query.executeWithArray
بهذه الطريقة يمكنني بناء المرشحات وإعلان المخمل ديناميكيا تحميل الكائنات الفعلية في صفيف من الكائن الذي يتم تمريره بعد ذلك إلى الطريقة المذكورة أعلاه.
طريقة مهمة أخرى هي executeWithMap
يمكنك استخدام Wich ل Bind Parameters بالاسم.