查询对象具有条件的外部集合

时间:2013-04-12 09:33:39

标签: ormlite foreign-collection

我正在学习使用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”的所有学生。然后将学生列表设置为主题对象。

  3. 感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我对你在这里想要实现的目标感到有点困惑。将来在详细描述问题之前要小心给出答案。

您对我之前回答(下方)的评论表明,您希望Collection<Student> students仅向未将delete字段设置为false的学生显示。目前ORMLite不支持外国集合的自定义查询。您的代码必须忽略已删除的学生。

另一种方法是将学生移到DeletedStudents表而不是设置布尔值。


如果您尝试删除所有已删除标记的Subject,然后所有Student将删除标记,那么您可以使用DeleteBuilder执行此操作。您不必担心更新Subject的学生集合。当您重新查询Subject时,它会反映更改。

如果您想要执行更复杂的操作,例如删除所有没有学生的Subjects,那么您将需要将QueryBuilder.join(...) methodDeleteBuilder一起使用。< / p>