Как связать мой объект getEmptyForeignCollection () с моим родительским объектом? - PullRequest
1 голос
/ 07 сентября 2011

Я хочу сохранить объект с двумя ForeignCollections. Но когда я пытаюсь запросить объект, мой foreignId всегда равен нулю. Я уже прочитал эти ответы, но это мне не очень помогает: Коллекции в 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 ]

1 голос
/ 07 сентября 2011

Ваш 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 или, по крайней мере, лучшее исключение.

0 голосов
/ 04 апреля 2014

Я бы порекомендовал использовать assignEmptyForeignCollection(Obj parent, fieldName).Это создаст новую чужую коллекцию, и для всех объектов, которые вы добавите через add(Obj element), родительское значение будет установлено автоматически.

...