0

我正在学习使用你的 Android ORMLite 框架。

但是我遇到了一个问题,我尝试了很多方法来解决但都失败了。

例如。我有 2 个数据库类:

@DatabaseTable(tableName = "Subject")
public class Subject {
        @DatabaseField(columnName = "id", id = true)
        protected String id;

        @DatabaseField(columnName = "deleteFlag", canBeNull = false, defaultValue = "0")
        protected boolean deleteFlag = false;

        @DatabaseField(columnName = "name", canBeNull = false)
        private String name;

        @ForeignCollectionField(eager = true, maxEagerLevel = 3)
        private Collection<Student> students;
        ...
}

@DatabaseTable(tableName = "Student")
public class Student {
        @DatabaseField(columnName = "id", id = true)
        protected String id;

        @DatabaseField(columnName = "deleteFlag", canBeNull = false, defaultValue = "0")
        protected boolean deleteFlag = false;

        @DatabaseField(columnName = "firstName", canBeNull = false)
        private String firstName;

        @DatabaseField(columnName = "lastName", canBeNull = true)
        private String lastName;

        @DatabaseField(columnName = "subjectId", canBeNull = false, foreign = true, foreignColumnName = "id")
        private Subject subject;

        ...
}

它要求数据库中的记录不被删除,它只是由deleteFlag列标记。

现在,我尝试查询所有具有“deleteFlag = false”的主题。每个科目都有“deleteFlag = false”的学生名单。

有没有办法使用 SubjectDao 查询???

或者我必须做两个步骤:

  1. 使用 SubjectDao 查询所有具有“deleteFlag = false”的主题;

  2. 在科目列表中循环,使用 StudentDao 查询该科目所有具有“deleteFlag = false”的学生。然后将学生列表设置为主题对象。

谢谢你的时间。

4

1 回答 1

0

我对你在这里真正想要完成什么感到有点困惑。将来在详细描述问题之前要小心给出答案。

您对我之前的回答(如下)的评论表明您希望Collection<Student> students只显示没有将该delete字段设置为的学生false。目前ORMLite不支持对外部集合的自定义查询。您的代码将不得不忽略已删除的学生。

一种选择是将学生移动到一张DeletedStudents桌子上,而不是设置一个布尔值。


如果您尝试仅删除所有Subject打开了 delete 标志的 s,然后所有Students 将删除标志,那么您可以使用DeleteBuilder. 您不必担心更新Subject学生的收藏。当您重新查询 aSubject时,它将反映更改。

相反,如果你想做一些更复杂的事情,比如删除所有Subjects没有学生的,那么你将需要使用QueryBuilder.join(...)DeleteBuilder.

于 2013-04-12T17:39:55.800 回答