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
吗?我通常使用 int
或 long
作为我的 ID 字段。
insertFamily(...)
在做什么?你为什么不直接打电话给 dao.create(...)
?
希望这里有所帮助。哦,最后,如果可以的话,请对匈牙利符号说 no。在 IDE 上使用着色来替换它。 :-)
我正在尝试保留两种对象。家族和亚家族。一个家族有一个或多个子家族。
我遇到的问题是我可以存储数据,但外部引用总是 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
吗?我通常使用int
或long
作为我的 ID 字段。 insertFamily(...)
在做什么?你为什么不直接打电话给dao.create(...)
?
希望这里有所帮助。哦,最后,如果可以的话,请对匈牙利符号说 no。在 IDE 上使用着色来替换它。 :-)