ORMLite 没有创建外部引用

ORMLite is not creating the foreign reference

我正在尝试保留两种对象。家族和亚家族。一个家族有一个或多个子家族。

我遇到的问题是我可以存储数据,但外部引用总是 NULL。

这些是 类,它们创建了正确的数据库结构:

Family.java

@DatabaseTable
public class Family {

    @DatabaseField(id = true)
    private Integer id;

    @DatabaseField
    private String name;

    @ForeignCollectionField(eager = true)
    private ForeignCollection<Subfamily> subfamilies;

    public Family() {}

    // public getters and setters
}

Subfamily.java

@DatabaseTable
public class Subfamily {
    @DatabaseField(id = true)
    private Integer id;

    @DatabaseField(foreign = true, foreignAutoRefresh = true)
    private Family family;

    @DatabaseField
    private String name;

    public Subfamily() {}

    public Subfamily(String name, Family family) {
        this.name = name;
        this.family = family;
    }

    // public getters and setters
}

然后我分离了Daos,用于插入Family和Subfamily

public void insertFamily(Family family) {
    try {
        this.familyDao.create(family);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}


public void insertSubfamily(Subfamily subfamily) {
    try {
        this.subfamilyDao.create(subfamily);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

然后当我像这样创建一个 Family 和 Subfamily 时,foreign 字段看起来总是 NULL。我不知道我做错了什么..

Family f1 = new Family("FAMILY ONE");
mFamilyDao.insertFamily(f1);
Subfamily s1 = new Subfamily("SUBFAMILY OF FAMILY ONE", f1);
mSubfamilyDao.insertSubfamily(s1);

Then when I create a Family and Subfamily like this, the foreign field looks always NULL. I Don't know what I'm doing wrong..

Family f1 = new Family("FAMILY ONE");
familyDao.insertFamily(f1);
Subfamily s1 = new Subfamily("SUBFAMILY OF FAMILY ONE", f1);
subfamilyDao.insertSubfamily(s1);

好的。这段代码表面上看起来不错,所以下面的列表是更多的尝试和调试提示,然后是解决方案。

  • 您确定不希望两个 ID 字段都使用 generatedId = true 吗?否则,您将需要自己设置 id 字段的值。
  • 您确定 f1 的 ID 字段也不是 null 吗?该字段设置在哪里?您应该在 insertFamily(...) 方法 returns 之后记录 f1.getId() 的值,以确保该值是一个整数。
  • 您真的希望该字段成为 Integer 吗? id 可以成为 null 吗?我通常使用 intlong 作为我的 ID 字段。
  • insertFamily(...) 在做什么?你为什么不直接打电话给 dao.create(...)

希望这里有所帮助。哦,最后,如果可以的话,请对匈牙利符号说 no。在 IDE 上使用着色来替换它。 :-)