我正在我的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”字段设置为空。请告诉我哪里做错了,如果我能提供更多的信息,也请告诉我,这样你就可以很容易地理解我的问题。谢谢您。!

最佳答案

请尝试下面的代码它可能会帮助你。

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

10-05 19:51