Java 指定类时Db4o queryByExample()方法的结果为空

Java 指定类时Db4o queryByExample()方法的结果为空,java,class,dynamic,classloader,db4o,Java,Class,Dynamic,Classloader,Db4o,所以我对db4oapi有一个奇怪的问题。我试图从数据库中检索某些类的对象(取决于用户的查询,但这并不真正相关)。数据库中肯定有我想要检索的类的对象。例如,当我为任何对象查询byExample()时,然后打印出对象集中每个元素的类,就像这样 public void evaluateQuery(ObjectContainer db) { if (this.hasPredicate) { ; } else { if (this.isNode) {

所以我对db4oapi有一个奇怪的问题。我试图从数据库中检索某些类的对象(取决于用户的查询,但这并不真正相关)。数据库中肯定有我想要检索的类的对象。例如,当我为任何对象查询byExample()时,然后打印出对象集中每个元素的类,就像这样

public void evaluateQuery(ObjectContainer db) {
    if (this.hasPredicate) {
        ;
    } else {
        if (this.isNode) {
            ObjectSet nodes = db.queryByExample(Object.class);
            ListIterator listIter = nodes.listIterator();
            while (listIter.hasNext()) {
                Object node = listIter.next();
                System.out.println("Object has Class: " + node.getClass());
            }
        }
    }
} 
。。。我得到了这样的结果

Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
public void evaluateQuery(ObjectContainer db) {
    if (this.hasPredicate) {
        ;
    } else {
        if (this.isNode) {
            ObjectSet<Node> nodes = db.queryByExample(Node.class);
            ListIterator<Node> listIter = nodes.listIterator();
            while (listIter.hasNext()) {
                Node node = listIter.next();
                System.out.println("Object has Class: " + node.getClass());
            }
        }
    }
…如您所见,数据库中的对象的类设置为Node和SubNode。现在,我希望代码能像这样工作

Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class Node
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
Object has Class: class SubNode
public void evaluateQuery(ObjectContainer db) {
    if (this.hasPredicate) {
        ;
    } else {
        if (this.isNode) {
            ObjectSet<Node> nodes = db.queryByExample(Node.class);
            ListIterator<Node> listIter = nodes.listIterator();
            while (listIter.hasNext()) {
                Node node = listIter.next();
                System.out.println("Object has Class: " + node.getClass());
            }
        }
    }
public void evaluateQuery(ObjectContainer数据库){
if(this.hasPredicate){
;
}否则{
if(this.isNode){
ObjectSet nodes=db.queryByExample(Node.class);
ListIterator listIter=节点。ListIterator();
while(listIter.hasNext()){
Node=listIter.next();
System.out.println(“对象有类:+node.getClass());
}
}
}

…但当我这样做时,ObjectSet总是空的,我似乎不知道为什么。我在运行时使用ClassLoader将某些类的子集(如上面的节点类)加载到环境中,它们肯定在那里,因为我在其他上下文中实例化/使用它们时没有问题。

使用直接查询对应项。It将检索给定类的所有实例。它与Java泛型的交互也更好=)

List nodes=db.query(Node.class);
//做事

这实际上是一个包导入问题。出于某种原因,当使用db4o表示

导入com.db4o.*

不解决依赖项,即说

导入com.db4o.query.Predicate


…是的。很奇怪…

嗯,这很奇怪。你能提供一个链接,指向一个显示此问题的完全有效的示例吗?