Java Google App Engine DataStore: 'in' المشغل متاح على مرشحات QDD QDO QUERY، كما هو الحال مع Python؟

StackOverflow https://stackoverflow.com/questions/1448677

  •  11-09-2019
  •  | 
  •  

سؤال

هذه الصفحة يصف المشغل "في" التي يمكن استخدامها في GAE DataStore لمقارنة حقل مقابل قائمة بالمباريات المحتملة، وليس فقط قيمة واحدة:

ومع ذلك هذا هو لبثيون. في جافا (محرك التطبيق 1.2.5)، تحاول

query.setFilter("someField IN param");

على javax.jdo.Query حرائق jdousieRexception 'جزء من التعبير لا يمكن تحليلها: في Param ".

هل هناك طريقة يمكن القيام بذلك؟

هل كانت مفيدة؟

المحلول

نسخة بيثون من IN يتم تنفيذها بالفعل في التعليمات البرمجية على مستوى التطبيق (والتي يمكنك فحصها نظرا لأنها جزء من SDK بمحرك التطبيق مفتوح المصدر): أساسا، استفسار مع IN مثل لك تصبح استفسارات n == (حيث n == len (param)) ونتائج تلك الاستعلامات n قد تم دمجها كنتيجة إجمالية.

في حين أنه من المناسب أن يكون لديك هذه الوظيفة كجزء من التعليمات البرمجية المصدر التي توفرها Google، فلا توجد قيمة مضافة حقا خارج هذا الراحة، وخاصة لا توجد ميزة أداء WRT فقط تفعل ذلك في التعليمات البرمجية الخاصة بك. لذلك، أنا لست مندهشا أن هذه القرص الصغير كان (على الأقل حتى الآن) لا يضاف إلى إصدار Java ...

نصائح أخرى

لاستخدام المشغل في التشغيل، يمكنني استخدام هذا:

List<Site> query(List<String> searchTerms)
{
    javax.jdo.Query q = pm.newQuery(Site.class);
    q.setFilter("param.contains(siteField)");
    q.declareParameters("java.util.Collection param");
    return (List<Site>)q.execute(searchTerms);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top