Tree Greendao树实体实现:父实体和子实体来自同一实体,不';不编译

Tree Greendao树实体实现:父实体和子实体来自同一实体,不';不编译,tree,entity,greendao,Tree,Entity,Greendao,我需要一些关于使用ORM GREENDAO定义的实体创建树表示的建议 事实上,我不能用我的自反属性生成dao文件。 我试图实现一个简单的类别树 类别1可以将类别0作为父类别,类别1也可以将多个类别作为子类别。因此,两个外键指向与源和目标相同的实体类别 我尝试了greendao在他们的站点上提出的代码来创建树实体,请参见 我的问题代码: Entity categories = schema.addEntity("CATEGORIES"); categories.addIdProperty().pr

我需要一些关于使用ORM GREENDAO定义的实体创建树表示的建议

事实上,我不能用我的自反属性生成dao文件。 我试图实现一个简单的类别树

类别1可以将类别0作为父类别,类别1也可以将多个类别作为子类别。因此,两个外键指向与源和目标相同的实体类别

我尝试了greendao在他们的站点上提出的代码来创建树实体,请参见

我的问题代码:

Entity categories = schema.addEntity("CATEGORIES");
categories.addIdProperty().primaryKey();
Property parentId= categories.addLongProperty("parentId").notNull().getProperty();
ToOne ParentCat = categories.addToOne(categories, parentId);
ParentCat.setName("parentId");
Property childrenId= categories.addLongProperty("childrenId").notNull().getProperty();
ToMany ChildrenCat = categories.addToMany(categories, childrenId);
ChildrenCat.setName("children");
我从编译器那里得到了这些异常:

greenDAO Generator
Copyright 2011-2015 Markus Junginger, greenrobot.de. Licensed under GPL V3.
This program comes with ABSOLUTELY NO WARRANTY
*Exception in thread "main" java.lang.RuntimeException: Currently only single FK columns are supported: ToOne 'parentId' from CATEGORIES to CATEGORIES
    at de.greenrobot.daogenerator.ToOne.init3ndPass(ToOne.java:91)
    at de.greenrobot.daogenerator.Entity.init3rdPassRelations(Entity.java:603)
    at de.greenrobot.daogenerator.Entity.init3rdPass(Entity.java:596)
    at de.greenrobot.daogenerator.Schema.init3rdPass(Schema.java:185)
    at de.greenrobot.daogenerator.DaoGenerator.generateAll(DaoGenerator.java:91)
    at de.greenrobot.daogenerator.DaoGenerator.generateAll(DaoGenerator.java:79)
    at Apptree_DAO_Generator.main(Apptree_DAO_Generator.java:13)*

因此,从同一实体表到同一实体表的外键似乎有问题。
还有其他方法吗?

事实上,您需要一个双向1对n关系。试着这样做:

Entity categories = schema.addEntity("CATEGORIES");
categories.addIdProperty().primaryKey();
Property parentId= categories.addLongProperty("parentId").notNull().getProperty();
ToOne ParentCat = categories.addToOne(categories, parentId);
ParentCat.setName("parent");
ToMany ChildrenCat = categories.addToMany(categories, parentId);
ChildrenCat.setName("children");
之后,您必须为每个类别设置父级

categoryB.setParent(categoryA);
categoryC.setParent(categoryB);
categoryD.setParent(categoryB);

当需要使用关系时,使用
categoryB
调用
categoryB.getParent()
将获得
categoryA
。孩子们也是如此,当你调用
categoryB.getChildren()
时,你会得到一个带有
categoryC
categoryD
的列表。事实上,你需要一个双向的1-to-n关系。试着这样做:

Entity categories = schema.addEntity("CATEGORIES");
categories.addIdProperty().primaryKey();
Property parentId= categories.addLongProperty("parentId").notNull().getProperty();
ToOne ParentCat = categories.addToOne(categories, parentId);
ParentCat.setName("parent");
ToMany ChildrenCat = categories.addToMany(categories, parentId);
ChildrenCat.setName("children");
之后,您必须为每个类别设置父级

categoryB.setParent(categoryA);
categoryC.setParent(categoryB);
categoryD.setParent(categoryB);

当需要使用关系时,使用
categoryB
调用
categoryB.getParent()
将获得
categoryA
。孩子们也是一样,当你调用
categoryB.getChildren()

谢谢,伙计,已经有一段时间了。。。最后我放弃了Greendao,改用ActiveAndroid。。。无论如何谢谢你的帮助谢谢老兄,已经有一段时间了。。。最后我放弃了Greendao,改用ActiveAndroid。。。无论如何谢谢你的帮助