2016-04-07 8 views
1

Ich brauche einen Hinweis auf eine Baumdarstellung mit einer Entität mit dem ORM GREENDAO definiert.Greendao Tree Entity-Implementierung: Eltern und Kinder aus der gleichen Entität, kompiliert nicht

Tatsächlich kann ich die DAO-Dateien mit meinen reflexiven Eigenschaften nicht erzeugen. Ich habe versucht, einen einfachen Baum von KATEGORIEN zu implementieren.

Die Kategorie 1 kann eine Kategorie 0 als Eltern haben und die Kategorie 1 kann auch mehrere Kategorien als Kinder haben. Also zwei Fremdschlüssel, die auf die gleiche Entitätskategorie wie Quelle und Ziel verweisen.

Ich versuchte den Code, den greundao auf ihrer Website vorschlagen, um eine Tree-Entity zu erstellen, siehe Section "Modelling Tree Relations (Example)" on the page.

Mein problematischen Code:

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"); 

Und ich habe Thesen bekam Ausnahmen vom Compiler:

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)* 

oder

*Exception in thread "main" java.lang.RuntimeException: Source properties do not match target properties: ToMany 'children' from CATEGORIES to CATEGORIES 
    at de.greenrobot.daogenerator.ToMany.init2ndPass(ToMany.java:59) 
    at de.greenrobot.daogenerator.Entity.init2ndPass(Entity.java:517) 
    at de.greenrobot.daogenerator.Schema.init2ndPass(Schema.java:179) 
    at de.greenrobot.daogenerator.DaoGenerator.generateAll(DaoGenerator.java:90) 
    at de.greenrobot.daogenerator.DaoGenerator.generateAll(DaoGenerator.java:79) 
    at Apptree_DAO_Generator.main(Apptree_DAO_Generator.java:13)* 

Also, ein Fremdschlüssel aus und demselben Entitätstabelle scheint problematisch zu sein. Gibt es einen anderen Weg, es zu tun?

Antwort

0

Tatsächlich benötigen Sie eine einzelne bidirektionale 1-zu-n-Beziehung. Probieren Sie etwas wie folgt aus:

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"); 

Danach müssen Sie für jede Kategorie die Eltern setzen

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

Wenn Sie brauchen, um die Beziehungen zu verwenden, categoryB verwenden Sie categoryA erhalten wird durch categoryB.getParent() aufrufen. Und das gleiche gilt für die Kinder, erhalten Sie eine Liste mit categoryC und categoryD, wenn Sie categoryB.getChildren() anrufen

+0

Danke Mann, es ist eine Weile für jetzt ... Schließlich lasse ich Greendao und ActiveAndroid stattdessen verwenden ... Danke für Ihre hilf trotzdem – Loturno