2010-02-21 47 views
1

我对JDO相当陌生,想问问是否可以使用复杂对象进行过滤。我知道,你可以做这样的事情:JDO查询:是否可以使用复杂对象进行过滤?

Query q = pm.newQuery(MyClass.class, "field1 < value"); 
q.declareParameters("int value"); 
List results = q.execute(205); 
Iterator iter = results.iterator(); 

但假设我有以下情况:

@PersistenceCapable(...) 
class ParentObj{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    String id; 
    ... 
    @Persistent 
    ChildObj child; 
} 

@PersistenceCapable(...) 
class ChildObj{ 
    @Persistent 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    String id; 

    ... 
} 

现在假设我想过滤所有ParentObj对象已给出一些ChildObj。我有

public List<ParentObj> getAllParentObjBy(ChildObj child){ 
    PersistenceManager pm = ... 
    Query query = pm.newQuery(ParentObj.class, "child = childVal"); 
    query.declareParameters("ChildObj childVal"); 

    Collection result = (Collection)query.execute(child); 
    //??? 

    return result; 
} 

这是非常伪代码,但我希望这个想法很清楚。我能不能像第一个例子那样使用查询对象,但在这种情况下,使用child实例?

回答

1

你绝对可以做“child == childVal”(即平等)......因为你可以在Java中。

你不能做转让(“=”)。

+0

感谢您的信息。我做了一切正确,但我想这是问题:http://code.google.com/appengine/docs/java/datastore/usingjdo.html#Unsupported_Features_of_JDO 不支持连接。 – Juri 2010-02-22 16:52:43

+0

如果想从某个childObject的字段中过滤它,如: - Query query = pm.newQuery(ParentObj.class,“child.id == childId”); query.declareParameters(“String childId”);我困在这。 – 2013-01-23 10:47:13