Fix bug 241 introduced in fix of bug 230. collections/mountpoints on transient

nodes are now created as normal node properties. The check whether they need
to be persistified is only done in makePersistentCapable(), i.e. when the node
is actually stored.
This commit is contained in:
hns 2003-06-11 08:24:40 +00:00
parent d19d094409
commit abbb48be8d

View file

@ -1646,12 +1646,12 @@ public final class Node implements INode, Serializable {
} }
// the property does not exist in our propmap - see if we should create it on the fly, // the property does not exist in our propmap - see if we should create it on the fly,
// either because it is mapped to an object from relational database or defined as // either because it is mapped to an object from relational database or defined as
// collection aka virtual node // collection aka virtual node
if ((prop == null) && (dbmap != null)) { if ((prop == null) && (dbmap != null)) {
Relation propRel = dbmap.getPropertyRelation(propname); Relation propRel = dbmap.getPropertyRelation(propname);
// if no property relation is defined for this specific property name, // if no property relation is defined for this specific property name,
// use the generic property relation, if one is defined. // use the generic property relation, if one is defined.
if (propRel == null) { if (propRel == null) {
propRel = dbmap.getPropertyRelation(); propRel = dbmap.getPropertyRelation();
@ -1668,12 +1668,8 @@ public final class Node implements INode, Serializable {
pn.setDbMapping(propRel.getVirtualMapping()); pn.setDbMapping(propRel.getVirtualMapping());
pn.setParent(this); pn.setParent(this);
if (propRel.needsPersistence()) { setNode(propname, pn);
setNode(propname, pn); prop = (Property) propMap.get(propname);
prop = (Property) propMap.get(propname);
} else {
prop = new Property(propname, this, pn);
}
} }
// if this is from relational database only fetch if this node // if this is from relational database only fetch if this node
// is itself persistent. // is itself persistent.
@ -2408,6 +2404,14 @@ public final class Node implements INode, Serializable {
IProperty next = get((String) e.nextElement()); IProperty next = get((String) e.nextElement());
if ((next != null) && (next.getType() == IProperty.NODE)) { if ((next != null) && (next.getType() == IProperty.NODE)) {
// check if this property actually needs to be persisted.
if (dbmap != null) {
Relation rel = dbmap.getExactPropertyRelation(next.getName());
if (rel != null && !rel.needsPersistence()) {
continue;
}
}
Node n = (Node) next.getNodeValue(); Node n = (Node) next.getNodeValue();
if ((n != null) && (n.state == TRANSIENT)) { if ((n != null) && (n.state == TRANSIENT)) {