そのため、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を使用して環境にロードします。他のコンテキストで問題なくインスタンス化/使用するため、クラスは確実にそこにあります。