2016-04-07 11 views
1

ORM GREENDAOで定義されたエンティティを使用してツリー表現を作成するためのアドバイスが必要です。Greendaoツリーエンティティの実装:同じエンティティの親と子がコンパイルされない

実際、反射特性を持つDAOファイルを生成することはできません。 私はCATEGORIESの単純なツリーを実装しようとしました。

カテゴリ1は、カテゴリ0を親として持つことができ、カテゴリ1は、複数のカテゴリを子供として持つこともできます。つまり、ソースとターゲットと同じエンティティカテゴリを指す2つの外部キーです。

greendaoがツリーエンティティを作成するためのサイトで提案するコードを試しました。Section "Modelling Tree Relations (Example)" on the pageを参照してください。

私の問題のコード:

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

かそこら

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

、からと同じに外部キーエンティティテーブルに問題があるようです。 別の方法がありますか?

答えて

0

実際、1対1の双方向のリレーションが必要です。このような何かを試してみてください。その後

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.getParent()を呼び出すことによってcategoryAを取得しますcategoryBを使用して、各カテゴリ

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

あなたが関係を使用する必要が

の親を設定する必要があります。そして、同じことが...あなたが categoryB.getChildren()

+0

おかげで男を呼び出すとき、それは今のところしばらくしている...最後に、私はGreendaoを削除し、代わりにActiveAndroid使用categoryCcategoryDでリストを取得します、子供たちのために行く、あなたのおかげでとにかく助けて – Loturno

関連する問題