6

ORMLiteで継承を使用しようとしていますが、ドキュメントを見てグーグルでサポートされているかどうかを判断できません。

私がしたいのは持っていることです

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
}

私が解決できないのは(サポートされていると仮定して)、ORMLiteの3つのクラスに注釈を付ける方法です。

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

次のようなエラーが発生し続けます。

04-24 10:18:30.857:E / AndroidRuntime(30495):原因:java.lang.RuntimeException:java.sql.SQLException:Androidsqliteカーソルからの不明なフィールド'name'、in:[year、school]

4

2 に答える 2

7

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

必要なのは、とのフィールドの@DatabaseField注釈です。例えば:idnamePerson

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

ORMLiteはクラス階層をたどる必要があり、基本クラスのすべてのフィールドがStudentおよびTeacherテーブルに含まれている必要があります。質問を編集して@DatabaseFieldまたは他の注釈を表示すると、さらにコメントできます。

于 2012-04-24T12:24:06.577 に答える
1

List<AbstractPerson>わかりましたが、その例では、 ?を含む 4 番目のクラスを実装する方法を説明します。

私は私の質問を正確に:

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

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

ormlite が次のような人々にアクセスしようとする場合:

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

personDAO が存在しないため取得できません (要約)... 適切な ID と関係を持つすべてのデータベース関数を取得します。これは単なるデータ アクセスの質問ですか?

于 2014-03-28T16:25:41.870 に答える