com.google.appengin.api.users.Userをプロパティに持つデータモデルから、それがログイン中のユーザーと一致するものだけを取得しようとする場合。
Python版では、
from google.appengine.api import users results = Hoge.all().filter('user = ', users.get_current_user())
と、サクッとフィルタリングできたと思ったら、Java版ではそう簡単にはいかない。
大河内教授の憂鬱: GAEでオブジェクト比較
ここを参考にしてやってみたら出来た。
PersistenceManagerFactory pmf = PMF.get(); // SingletonのPersistenceManagerFactory PersistenceManager pm = pmf.getPersistenceManager(); Query query = pm.newQuery("SELECT FROM " + Hoge.class.getName()); query.setFilter("user == currentUser"); query.declareParameters("com.google.appengine.api.users.UserService currentUser"); Object results = query.execute(UserServiceFactory.getUserService().getCurrentUser());
declareParametersというもので型を教えてあげないといけないらしい。ドキュメントに明記されてるのかなこれ…?探してもよく分からなかった。ちゃんと書いてあった。英語が読めてなかっただけか orz
http://code.google.com/intl/en/appengine/docs/java/datastore/queriesandindexes.html
やっぱりPythonの方が簡単でいいなー、というのが今のところの感想。