GAE Python数据存储-嵌套类表查询 - java

我有一个Java类,其中包含一些嵌套类,如下所示:

public class OuterClass{

    @PrimaryKey
    private String id;

    @Persistent
    private String name;

    // --- blah blah

    static class MyNestedClass{
        //--- properties declaration
    }
}

此类工作正常,基本上只在一个结构(OuterClass)中,我可以存储n个嵌套结构,每个结构都可以用作数据存储表。

datastore viewer检查我的ds,我发现现在有了一个名为OuterClass$MyNestedClass的表,我可以像下面这样在该表上成功运行GQL查询:

//--- note the wrapping quotation marks on the table name
SELECT * FROM "OuterClass$MyNestedClass" where something = '100'

到现在为止一切正常。现在,我需要创建一个google app engine python方法来清空嵌套的类表。我已经使用其他表/类做到了这一点,但是从来没有使用嵌套类。

这是我的python代码:

import cgi
import datetime
import urllib
import webapp2

from google.appengine.ext import db

class OuterClass$MyNestedClass(db.Model):
    name = db.StringProperty()
    surname= db.StringProperty()
    age = db.StringProperty()

class emptyMyNestedClassHandler(webapp2.RequestHandler):
    def get(self):
        nestedclass= db.GqlQuery("SELECT __key__ FROM \"OuterClass$MyNestedClass\"")
        count = 0

        for p in nestedclass:
            count += 1
        db.delete(nestedclass)

        self.response.out.write("Deleted SMyNestedClass Entities: " + str(count))

app = webapp2.WSGIApplication([
    ('/emptyMyNestedClass', emptyMyNestedClassHandler)
], debug=True)

这是我得到的错误

class OuterClass$MyNestedClass(db.Model):
                ^
SyntaxError: invalid syntax

我试图将类名称从OuterClass$MyNestedClass更改为MyNestedClass,但出现此错误:

KindError: No implementation for kind 'OuterClass$MyNestedClass'

我必须为我的python类分配哪个名称才能使其工作?如何处理$问题?

希望我已经足够清楚了,谢谢

在Matt's suggestion之后,我的JAVA类现在如下所示:

public class OuterClass{

    @PrimaryKey
    private String id;

    @Persistent
    private String name;

    // --- blah blah
    @PersistenceCapable( table="NestedClass")
    @Embedded
    static class NestedClass{
        //--- properties declaration
    }
}

这是Python代码:

import cgi
import datetime
import urllib
import webapp2

from google.appengine.ext import db

class NestedClass(db.Model):
    name = db.StringProperty()
    surname = db.StringProperty()
    age = db.StringProperty()

class emptyNestedClassHandler(webapp2.RequestHandler):
    def get(self):
        nestedclass= db.GqlQuery("SELECT __key__ FROM NestedClass")
        count = 0

        for p in nestedclass:
            count += 1
        db.delete(nestedclass)

        self.response.out.write("Deleted NestedClassEntities: " + str(count))

app = webapp2.WSGIApplication([
    ('/emptyNestedClass', emptyNestedClassHandler)
], debug=True)

请注意,我必须声明类NestedClass

谢谢!

参考方案

看一下JDO annotations的资源。

您可能想要像这样注释您的班级:

public class OuterClass{

    @PrimaryKey
    private String id;

    @Persistent
    private String name;

    // --- blah blah
    @PersistenceCapable( table="NestedClass")
    @Embedded
    static class NestedClass{
        //--- properties declaration
    }
}

通过GQL,您应该可以执行以下操作:

SELECT * FROM "OuterClass" where NestedClass.something = '100'

GAE ClassFormatError:不兼容的魔术值4022320623 EFBFBDEF - java

我在简化的Eclipse项目中有一个简单的webapp。我的pom.xml包含一些将Google的appengine-maven-plugin添加到构建插件的行。当我运行mvn appengine:devserver时,我最终收到一条错误消息,告诉我无法加载我的课程: [INFO]警告:启动处理程序时出错 [INFO] java.lang.ClassForm…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

Google Drive API访问我自己的帐户 - java

我希望在服务器/笔记本电脑上运行一个简单的过程,每天将文件每天上传一次到Google驱动器中。我不想分享此信息,不允许其他用户使用它等。我发现的所有示例似乎都涉及浏览到一个地址以获得用户(我)的许可,然后获取身份验证代码等并继续参考:Java quickstart有没有一种方法/示例可以做到这一点而无需浏览器,每次我只想为自己的帐户获得许可时都获得唯一的身份…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…