2016-11-28 3 views
3

Android 앱에 ActiveAndroid를 구현하고 있습니다. 그 이유는 this link입니다. 내 문제 정의는, 내가 retrofit 라이브러리의 도움으로 서버에서 데이터 목록을 받고 있어요. 데이터 목록을 가져온 후 내 "ActiveAndroid"DB에 데이터를 삽입하고 있습니다. 내 응용 프로그램을 디버깅하는 동안 외래 키 및 모델 클래스의 다른 데이터 멤버에 대한 데이터가 올바른지 확인했지만 "ActiveAndroid"에서 데이터를 다시 가져 오려고 할 때 외래 키 null이 발생했습니다. 내가 많이 봤지만 아직 문제를 추적 할 수 없습니다. 1] Event.java 클래스는 위의 "이벤트"모델 클래스에 나타낸 바와 같이ActiveAndroid에서 외래 키 멤버 "null"가져 오기

@Table(name = "Events") 
public class Event extends Model 
{ 

    @Column(name = "eventID") 
    private int eventID; 
    @Column(name = "eventName") 
    private String eventName; 
    @Column(name = "Ground") 
    private Ground ground; 


    public Event() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Event(int eventID, String eventName, 
      Ground ground) { 
     super(); 
     this.eventID = eventID; 
     this.eventName = eventName;  
     this.ground = ground;   
    } 

    public int getEventID() { 
     return eventID; 
    } 

    public void setEventID(int eventID) { 
     this.eventID = eventID; 
    } 

    public String getEventName() { 
     return eventName; 
    } 

    public void setEventName(String eventName) { 
     this.eventName = eventName; 
    } 

    public Ground getGround() { 
     return ground; 
    } 

    public void setGround(Ground ground) { 
     this.ground = ground; 
    }  
} 

, 하나가 classes-- 자세한 내용은 현재 내가 모델 다음 한 details--

아래에서 확인하세요 외래 키 즉 "Ground".

2] Ground.java 클래스 is--

Table(name = "Ground") 
public class Ground extends Model 
{ 
    @Column(name = "groundID") 
    private int groundID; 
    @Column(name = "groundName") 
    private String groundName; 

    public Ground() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public int getGroundID() { 
     return groundID; 
    } 

    public void setGroundID(int groundID) { 
     this.groundID = groundID; 
    } 

    public String getGroundName() { 
     return groundName; 
    } 

    public void setGroundName(String groundName) { 
     this.groundName = groundName; 
    } 

    public Ground(int groundID, String groundName) 
{ 
     super(); 
     this.groundID = groundID; 
     this.groundName = groundName; 
    } 
} 

3] 나는 "ActiveAndroid DB"이벤트를 저장하고있어 방법이있다

ActiveAndroid.beginTransaction(); 
    try 
    { 
      for (int i = 0; i < list.size(); i++) 
      { 
       list.get(i).save(); 

       /* 
        Also tried--- 
        list.get(i).getGround.save(); 
        list.get(i).save(); 
       */ 
      } 
      ActiveAndroid.setTransactionSuccessful(); 
    } 
    finally 
    { 
      ActiveAndroid.endTransaction(); 
    } 

4]이 내가받는 방법은 "ActiveAndroid"DB에서 이벤트 목록

public static List<Event> getAllEvents() 
    { 
     return new Select() 
       .all() 
       .from(Event.class) 
       .execute(); 
    } 

"ActiveAndroid"에서 목록을 가져온 후 "Ground"필드가 null로 표시됩니다. 제게 잘못되어 가고있는 곳으로 안내해주십시오. 제 문제를 쉽게 이해할 수 있도록 더 많은 정보를 제공해 줄 수 있는지 알려 주시기 바랍니다. 고맙습니다.!

답변

0

아래 코드를 사용해 보시고 도움을 받으십시오.

@Table(name = "Events") 
public class Event extends Model { 
    @Column(name = "eventID") 
    private int eventID; 
    @Column(name = "eventName") 
    private String eventName; 
    @Column(name = "Ground", onUpdate = Column.ForeignKeyAction.CASCADE, onDelete = Column.ForeignKeyAction.CASCADE) 
    private Ground ground; 


    public Event() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Event(int eventID, String eventName, 
       Ground ground) { 
     super(); 
     this.eventID = eventID; 
     this.eventName = eventName; 
     this.ground = ground; 
    } 

    public int getEventID() { 
     return eventID; 
    } 

    public void setEventID(int eventID) { 
     this.eventID = eventID; 
    } 

    public String getEventName() { 
     return eventName; 
    } 

    public void setEventName(String eventName) { 
     this.eventName = eventName; 
    } 

    public Ground getGround() { 
     return getMany(Ground.class, "Ground");//or/*new Select().from(Ground.class).execute();*/ 
    } 

    public void setGround(Ground ground) { 
     this.ground = ground; 
    } 
}