所以,我有一个单向的一对多关系,我希望将孩子保持在有序列表中。由于他们已经拥有“索引”属性,我尝试遵循http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html上的建议并使用“list-ordering”扩展来使用index-property来确定子节点的顺序,而不是使用auto-生成一个。
不幸的是,只要我添加注释,就会停止返回子项,只给我一个空列表。
我用这个简单的例子重新创建了问题:
@PersistenceCapable(detachable = "true")
@FetchGroup(name = "parent.children", members = {@Persistent(name = "children")})
public class Parent {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="index ASC"))
private List<Child> children;
// getters/setters
}
@PersistenceCapable(detachable = "true")
public class Child {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private Integer index;
// getters/setters
}
DAO:
public void save(T entity) {
PersistenceManager pm = getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
pm.makePersistent(entity);
tx.commit();
} finally {
if(tx.isActive())
tx.rollback();
pm.close();
}
}
public T get(Key key, String... fetchGroups) {
PersistenceManager pm = getPersistenceManager();
Transaction tx = pm.currentTransaction();
addFetchGroups(pm, fetchGroups);
try {
tx.begin();
pm.setDetachAllOnCommit(true);
T entity = (T) pm.getObjectById(entityClass, key);
tx.commit();
return entity;
} finally {
if(tx.isActive())
tx.rollback();
pm.close();
}
}
测试代码:
Parent parent = new Parent();
Child child = new Child();
child.setIndex(10);
parent.getChildren().add(child);
mParentDao.save(parent);
Parent parent2 = mParentDao.get(parent.getKey(), "parent.children");
我有什么特别的错误吗?
[编辑]以下是相关的日志输出:
数据存储:将类型PARENT的实体与关键PARENT(no-id-yet)放在一起 数据存储:将关键PARENT(3)/ CHILD(no-id-yet)的实体CHILD放入实体中 数据存储:INDEX:10
数据存储:提交的数据存储事务:0
数据存储:启动新数据存储事务:1
数据存储:获得具有关键父母(3)的亲切父母的实体 Datastore.Retrieve:准备查询类型为CHILD的父母(3)的所有子女 Datastore.Retrieve:添加了排序:索引ASCENDING
Datastore.Retrieve:查询结果为0 数据存储:提交的数据存储事务:1
答案 0 :(得分:0)
我使用GAE插件1.7.0和JDO,我的场景完全一样。我有一个项目列表,我也需要维护他们的订单。
现在我使用该应用程序很长一段时间而没有进行上述更改(未实现该功能)。
今天我使用文章实现了订单功能,但未检索到数据!数据存在于数据库中,但在父对象加载期间不会获取。即使列表标有:
@Persistent(defaultFetchGroup = "true")
@Element(dependent = "true")