0

そのため、Db4oAPIで奇妙な問題が発生しています。データベースから特定のクラスのオブジェクトを取得しようとしています(ユーザーのクエリによって異なりますが、実際には関係ありません)。データベースには、取得したいクラスのオブジェクトが確実に含まれています。したがって、たとえば、任意のオブジェクトに対してqueryByExample()を実行し、オブジェクトセットの各要素のクラスを出力すると、次のようになります...

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());
            }
        }
    }

..しかし、これを行うと、ObjectSetは常に空になり、その理由がわかりません。上記のノードクラスなどのクラスの特定のサブセットを実行時にClassLoaderを使用して環境にロードします。他のコンテキストで問題なくインスタンス化/使用するため、クラスは確実にそこにあります。

4

2 に答える 2

0

対応する直接クエリを使用します。指定されたクラスのすべてのインスタンスを取得します。また、Javaジェネリックとの相互作用も向上します=)

List<Node> nodes = db.query(Node.class);
// do stuff
于 2012-07-14T09:13:59.523 に答える
0

これは実際にはパッケージのインポートの問題でした。何らかの理由でdb4oを使用して言うとき...

インポートcom.db4o。*;

言っている依存関係を解決しません...

com.db4o.query.Predicateをインポートします。

...します。変....

于 2012-07-15T18:53:48.673 に答える