如何将我的getEmptyForeignCollection()对象与我的父对象链接?

时间:2011-09-07 13:44:31

标签: android orm collections ormlite foreign-collection

我想用两个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;
    ...
}

2 个答案:

答案 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)添加的所有对象将自动设置父值。