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: Android sqlite 游标中的未知字段“名称”,不在:[年份,学校]

4

2 回答 2

7

@DatabaseTable注释仅在Studentor表上是必需的,如果它在基类Teacher上则不会使用。Person

您需要@DatabaseFieldidnamePerson. 例如:

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

ORMLite应该遍历类层次结构,并且基类中的任何字段都应该包含在StudentTeacher表中。如果您编辑问题以显示@DatabaseField注释或其他注释,我可以发表更多评论。

于 2012-04-24T12:24:06.577 回答
1

好的,但是现在,在该示例中,如何实现包含List<AbstractPerson>?

我明确了我的问题:

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 回答