标签: jdoql

为什么我在Google App Engine上使用JDO在我的查询中收到了强制转换错误?

根据查询和索引文档,您可以有效地进行查询(据我所知):

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)

java google-app-engine jdo jdoql

5
推荐指数
1
解决办法
4225
查看次数

适用于Google App Engine的JDO:转义引号

如何在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)

security google-app-engine jdo jdoql

5
推荐指数
1
解决办法
757
查看次数

持久性JDO - 如何使用JDOQL查询集合的属性?

我想构建一个应用程序,其中由电子邮件地址标识的用户可以拥有多个应用程序帐户.每个帐户可以包含一个或多个用户.我正在尝试将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)

java google-app-engine storage jdoql

4
推荐指数
1
解决办法
3052
查看次数

App Engine数据存储区不支持运算符OR

我正在尝试查询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.

对于这类查询,人们体验的最佳方法是什么?

任何帮助赞赏!

java google-app-engine jdoql google-cloud-datastore

3
推荐指数
1
解决办法
6785
查看次数

":P"在JDO查询中的含义是什么

我在谷歌应用引擎上使用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'有什么特别的含义吗?

java google-app-engine jdo jdoql

3
推荐指数
1
解决办法
699
查看次数