我正在学习使用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 ???
进行查询或者我必须做两个步骤:
使用SubjectDao查询所有具有“deleteFlag = false”的主题;
在主题列表中循环,使用StudentDao查询该主题中具有“deleteFlag = false”的所有学生。然后将学生列表设置为主题对象。
感谢您的时间。
答案 0 :(得分:0)
我对你在这里想要实现的目标感到有点困惑。将来在详细描述问题之前要小心给出答案。
您对我之前回答(下方)的评论表明,您希望Collection<Student> students
仅向未将delete
字段设置为false
的学生显示。目前ORMLite不支持外国集合的自定义查询。您的代码必须忽略已删除的学生。
另一种方法是将学生移到DeletedStudents
表而不是设置布尔值。
如果您尝试删除所有已删除标记的Subject
,然后所有Student
将删除标记,那么您可以使用DeleteBuilder
执行此操作。您不必担心更新Subject
的学生集合。当您重新查询Subject
时,它会反映更改。
如果您想要执行更复杂的操作,例如删除所有没有学生的Subjects
,那么您将需要将QueryBuilder.join(...)
method与DeleteBuilder
一起使用。< / p>