我有一个包含一些嵌套类的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
。
谢谢!
答案 0 :(得分:1)
查看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'