我想用两个foreignCollections持久保存一个对象。 但是当我尝试查询对象时,我的foreignId始终为null。 我已经阅读了这些答案,但它对我没有帮助:Collections in ORMLite
VOPerception perception = new VOPerception();
perception.setOrientation(daoOrientation.createIfNotExists(
orientationLocalizer.getCurrentOrientation()));
ForeignCollection<VOAccessPoint> fAp =
daoPerception.getEmptyForeignCollection("accessPoints");
fAp.addAll(wifiLocalizer.getCurrentScanResultMap());
perception.setAccessPoints(fAp);
daoPerception.create(perception);
List<VOPerception> list = daoPerception.queryForAll();
此处数据已正确存储,但VOAccessPoint对象与父VOPerception对象没有链接。
以下是我的两个课程:
public class VOPerception {
@DatabaseField(generatedId=true)
private int per_id;
@ForeignCollectionField(eager=true)
ForeignCollection<VOAccessPoint> accessPoints;
...
}
public class VOAccessPoint{
@DatabaseField(generatedId=true)
private int ap_id;
@DatabaseField(foreign=true,columnName="apForeignPerception_id")
private VOPerception apForeignPerception;
...
}
答案 0 :(得分:1)
您的queryForAll()
没有返回任何对象,因为您的VOAccessPoint
个实例都没有将apForeignPerception
字段设置为perception
。使用VOAccessPoint
添加ForeignCollection
个对象将添加到DAO ,但不自动分配其apForeignPerception
字段。
您应该执行以下操作:
...
Collection<VOAccessPoint> points = wifiLocalizer.getCurrentScanResultMap();
for (VOAccessPoint point : points) {
point.setApForeignPerception(perception);
}
fAp.addAll(points);
...
我可以看到您如何认为这会自动处理,但当它们被添加到ForeignCollection
时,perception
甚至没有被分配。我怀疑这里ORMLite缺少一个功能,或者至少有一个更好的例外。
答案 1 :(得分:0)
我建议使用assignEmptyForeignCollection(Obj parent, fieldName)
。这将创建一个新的外部集合,您将通过add(Obj element)
添加的所有对象将自动设置父值。