2013-04-12 2 views
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를 사용하여 쿼리 할 수있는 방법이 있습니까 ???

아니면 2 단계해야 "deleteFlag = 거짓"이 모든 과목을 조회 할 수 SubjectDao를 사용

  1. 을;

  2. "deleteFlag = false"가있는 해당 주제의 모든 학생을 검색하기 위해 StudentDao를 사용하여 주제 목록에서 반복하십시오. 그런 다음 대상 목록에 학생 목록을 설정합니다.

감사합니다.

답변

0

나는 실제로 여기에서 무엇을하려고하는지 조금 혼란스러워합니다. 문제를 자세히 설명하기 전에 미래에 답을 주시도록주의하십시오.

이전 답변 (아래)에 대한 귀하의 의견은 필드가 false으로 설정되지 않은 학생들에게만 Collection<Student> students이 표시되기를 바랍니다. 지금 ORMLite은 외국 컬렉션에 대한 사용자 지정 쿼리를 지원하지 않습니다. 코드는 삭제 된 학생을 무시해야합니다.

한 가지 대안은 부울을 설정하는 대신 학생을 DeletedStudents 테이블로 이동시키는 것입니다.


당신은 삭제 플래그 다음 그와 DeleteBuilder을 할 수있는 것입니다 단지에 다음 Student의 모든 삭제 플래그를 모두 Subject의를 제거하려는 경우. Subject 님의 소식 모음을 업데이트하는 것에 대해 걱정할 필요가 없습니다. Subject에 대해 다시 쿼리하면 변경 사항이 반영됩니다.

학생들이없는 Subjects을 모두 삭제하는 등 더 복잡한 작업을 수행하려는 경우 DeleteBuilder과 함께 QueryBuilder.join(...) method을 사용해야 할 것입니다.

+0

삭제시 문제가 발생하지 않았습니다. 방금 레코드의 deleteFlag를 true로 설정하면 해당 레코드는 DELETED로 간주됩니다. –

+0

내 문제는 데이터를 쿼리하는 것입니다. 예를 들어, Subject1에는 3 명의 학생 St1, St2, St3이 있습니다. St1과 St2에는 deleteFlag가, St3에는 deleteFlag가 설정되어 있습니다. 내 요구 사항은 Subject1의 외국 수집에만 St1 ans St2 있습니다. 그러나 SubjectDao를 사용하여 쿼리 할 때 컬렉션에는 항상 3이 있습니다. 이 문제를 처리하도록 도와주세요. –

+0

나는 내 대답 @ThanhPham을 편집했습니다. – Gray

관련 문제