【问题标题】:Getting foreign key member "null" in ActiveAndroid在 ActiveAndroid 中获取外键成员“null”
【发布时间】:2016-11-28 05:47:19
【问题描述】:

我正在我的 Android 应用中实现 ActiveAndroid,我指的是 this link。我的问题定义是,我在改造库的帮​​助下从服务器获取数据列表。获得数据列表后,我将数据插入到我的“ActiveAndroid”数据库中。在调试我的应用程序时,我检查了外键数据和模型类的其他数据成员的数据是否正确,但是当我尝试从“ActiveAndroid”取回数据时 我的外键为空。我用谷歌搜索了很多,但仍然无法追踪问题。欲了解更多信息,请查看以下详细信息--

目前我有以下模型类—— 1] Event.java 类

@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;
    }    
}

如上图“Event”模型类,有一个外键,即“Ground”。

2] Ground.java 类是--

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”数据库获取事件列表的方式

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

但是从“ActiveAndroid”获取列表后,我将“Ground”字段设为空。请指导我哪里出错了,如果我可以提供更多信息,请告诉我这样您就可以轻松理解我的问题。谢谢!

【问题讨论】:

    标签: android activeandroid


    【解决方案1】:

    请尝试下面的代码,它可能对您有所帮助。

     @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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2021-01-13
      • 2019-11-17
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多