【问题标题】:How to do generic queries with Objectify, to get a sample entity of each Kind如何使用 Objectify 进行通用查询,以获取每种类型的示例实体
【发布时间】:2013-11-22 20:21:10
【问题描述】:

我的应用程序中有许多不同的种类,它们在数据存储区中是不相关的,但它们共享一个通用 Java 基类,可以帮助我对它们进行通用处理。 (一般我的意思是不考虑它们的种类,而不是 Java 的“泛型”意义上的。)

现在我想对每种实体中的一个实体进行一些测试,但我不知道该怎么做。

我想做这样的事情:

Class<? extends MyBaseUnit> cl = getNextKind();
MyBaseUnit bu = (MyBaseUnit) ofy().load().type( cl ).filter( ?? ).first().now();

我认为没有空过滤器之类的东西,如果我只是删除 filter() 调用,那么 first() 返回一个 Ref,我似乎对此无能为力。

我想我可以对所有具有长 id 的类型使用 ("id >", 0) 过滤器,但是对于具有字符串名称的那些,类似的无意义过滤器是什么?

或者也许有更好的方法来做到这一点?我的理想是每次运行测试时检索不同的实体。

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore objectify


    【解决方案1】:

    最后,我以我在问题末尾所考虑的丑陋方式做到了:

    for (KindInfo ki: kinds) {
        BaseUnit bu = null;
        List<? extends BaseUnit> lbu = null;
    
        if (ki.usesLongKey()) {
            lbu = ofy().load().type( cl ).filter( "id !=", 7).limit(1).list();
        } else {
            lbu = ofy().load().type( cl ).filter( "kn !=", "barf35" ).limit(1).list();
        }
        if ((null == lbu) || (0 == lbu.size())) {
            Log.i( "No entities for type=" + cl.getName() );
        } else {
            bu = (BaseUnit) lbu.get(0);
            runTestsOnSampleEntity( bu );
        }
    }
    

    过滤器只是由值组成(“kn”是我所有使用字符串键名的种类使用的属性名称)。

    我最初尝试使用 ("id !=", 0") 过滤器,因为 0 不是有效的 id,但这导致了 ""java.lang.IllegalArgumentException"。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2012-08-22
      • 2012-10-01
      • 1970-01-01
      相关资源
      最近更新 更多