根据查询和索引文档,您可以有效地进行查询(据我所知):
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query q = pm.newQuery(App.class);
q.setOrdering("name desc");
try {
results = (ArrayList<App>) q.execute();
} finally {
q.closeAll();
}
} finally {
pm.close();
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误results = (ArrayList<App>) q.execute();
:
java.lang.ClassCastException: org.datanucleus.store.appengine.query.StreamingQueryResult cannot be cast to java.util.ArrayList
at com.killerrobots.AppSite.MainServlet.getApplications(MainServlet.java:66)
at com.killerrobots.AppSite.MainServlet.doGet(MainServlet.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313) …
Run Code Online (Sandbox Code Playgroud) 如何在JDO(Google App Engine)中转义查询参数?
例如,如果变量名称可能包含不安全的字符作为单引号('),如何使下一个代码段安全?
PersistenceManager pm = ...;
String query = "select from Person where name='"+name+"'";
List<Shortened> shortened = (List<Shortened>) pm.newQuery(query).execute();
Run Code Online (Sandbox Code Playgroud) 我想构建一个应用程序,其中由电子邮件地址标识的用户可以拥有多个应用程序帐户.每个帐户可以包含一个或多个用户.我正在尝试将JDO存储功能与Google App Engine Java结合使用.这是我的尝试:
@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public class AppAccount {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String companyName;
@Persistent
List<Invoices> invoices = new ArrayList<Invoices>();
@Persistent
List<AppUser> users = new ArrayList<AppUser>();
// Getter Setters and Other Fields
}
@PersistenceCapable
@EmbeddedOnly
public class AppUser {
@Persistent
private String username;
@Persistent
private String firstName;
@Persistent
private String lastName;
// Getter Setters and Other Fields
}
Run Code Online (Sandbox Code Playgroud)
当用户登录时,我想检查他所属的帐户数量.如果他或她属于多个人,那么他或她将被提供一个仪表板,他/她可以点击他/她想要加载的帐户.这是我的代码,用于检索他/她注册的应用帐户列表.
public static List<AppAccount> getUserAppAccounts(String username) {
PersistenceManager pm = JdoUtil.getPm();
Query q …
Run Code Online (Sandbox Code Playgroud) 我正在尝试查询google数据存储区(类似于pm - > persistanceManager):
String filters = "( field == 'value' || field == 'anotherValue' )";
Query query = pm.newQuery(myType.class, filters);
Run Code Online (Sandbox Code Playgroud)
当我执行时 - 我回来了:App Engine数据存储区不支持运算符OR.
对于这类查询,人们体验的最佳方法是什么?
任何帮助赞赏!
我在谷歌应用引擎上使用JDO.每个"员工"都有一个"密钥".我有一组密钥,想要检索其密钥属于该集合的所有Employees.
所以我使用此处指定的'contains()'过滤器实现了它.代码工作正常,看起来像这样 -
List<Key> keys = getLookupKeys(....) ..//Get keys from somewhere.
Query query = pm.newQuery(Employee.class,":p.contains(key)"); //What is ":P" here?
List<Employee> employees = (List<Employee>) q.execute(keys); //This correctly gives me all I want
Run Code Online (Sandbox Code Playgroud)
我想知道的是这个查询中的这个":P"是什么?Employee对象没有任何名为'p'的字段,我的查询也没有声明任何此类参数.那么'p'指向的是什么?'p'有什么特别的含义吗?