سؤال

أنا ألعب مع محرك تطبيق Google وبعد قليل من المتاعب استفسلة jdedql.

يوضح المثال كيفية جلب الاشياء من DataStore:

PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + Greeting.class.getName();
List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute();

ولكن ماذا لو أردت جلب الأشياء فقط لمستخدم معين؟

في أسفل الصفحة في الرابط أعلاه يظهر أننا يمكن أن يكون هناك شيء مثل:

select from guestbook.Greeting where author == 'alfred@example.com'

ولكن إذا حاولت ما يلي، فلا يجلب أي شيء:

PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + Greeting.class.getName() + " where author == '" + user.GetEmail() + "'";
List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute();

أين user جلب كما هو موضح في نفس المثال مثل هذا:

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

أنا متأكد من أن هذه مهمة شائعة، لكنني لا أستطيع الحصول عليها للعمل - أي مساعدة في تقديرها!

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

المحلول

بعد مناقشة هذا الموضوع على مجموعات Google حصلت عليه العمل مثل هذا:

String select_query = "select from " + Greeting.class.getName(); 
Query query = pm.newQuery(select_query); 
query.setFilter("author == paramAuthor"); 
query.declareParameters("java.lang.String paramAuthor"); 
greetings = (List<Greeting>) query.execute(user);

بناء جملة JDQL محترق ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top