2012-04-24 4 views
6

私はORMLiteで継承を使用しようとしています。サポートされているかどうか、ドキュメントやグーグルリングを見てもうまくいきません。私が何をしたいかORMLiteを使用して継承クラスに正しく注釈を付けるにはどうすればよいですか?

は私がORMLiteのための3つのクラスに注釈を付ける方法です(これはサポートされていますと仮定して)出て働くことができない何

public abstract class Person{ 
    public int id; 
    public String name; 
} 

public class Student extends Person{ 
    public String school; 
    public String year; 
    // other student stuff 
} 

public class Teacher extends Person{ 
    public String title; 
    // other teacher stuff 
} 

持っています。

@DatabaseTable(tableName = "Student")で具体的なクラスに注釈を付けるだけでいいですか、抽象クラスも必要ですか?

私のようなエラーを得続ける:

4月24日10:18:30.857:E/AndroidRuntime(30495):java.lang.RuntimeException:によって引き起こさます。java.sql.SQLException:不明なフィールド " Androidのsqliteのカーソルから名前」、いないで:[年、学校は]

答えて

7

@DatabaseTable注釈StudentまたはTeacherテーブルにのみ必要であり、それはPersonベースクラスにあった場合は使用できません。

必要なものはidnameフィールドの@DatabaseField注釈はPersonです。例えば:

public abstract class Person{ 
    @DatabaseField(generatedId = true) 
    public int id; 
    @DatabaseField 
    public String name; 
} 

ORMLiteはクラス階層を歩くべきであり、ベースクラスからの任意のフィールドがStudentTeacherテーブルに含まれるべきです。質問を編集して@DatabaseFieldやその他の注釈を表示すると、私はさらにコメントできます。

+0

これは、このシナリオでORMLiteが機能するかどうかに関して私の質問に答えました。 – srowley

1

これでいいですが、今のところ、その例では、List<AbstractPerson>を含む第4のクラスをどのように実装するのですか?

私は正確に私の質問:それは(抽象的に存在しないため、personDAOを取得することができなくなります

for (Person person : classRoom.peoples) 
{ 
    if (person.getType() == Student) 
     //do stuff 
    else if (person.getType() == Student) 
     //do other stuff 
} 

public class ClassRoom { 
    @ForeignCollectionField(foreignFieldName="asYouWant") 
    public Collection<Person> peoples; 
} 

peoples.add(new Student()); 
peoples.add(new Teacher()); 
peoples.add(new Student()); 

ormliteは次のように人々にアクセスしようとするときので、 )... 私はすべてのデータベースのfunctionnalが良いIDと関係を持っていますが、それは単なるデータアクセスの質問ですか?

関連する問題