Как сохранить ForeignCollection с помощью ormlite 4.42?

Я пытаюсь сохранить ленивую ForeignCollection с помощью ormlite. 4.42 и sqlite в настольном приложении.

У меня есть класс Event, который содержит коллекцию EventDate:

@DatabaseTable(tableName = "event")
public class Event extends BaseDaoEnabled<Event, Integer> implements Scrap {

     @DatabaseField(generatedId = true, columnName = "_id")
     private int id;

     @ForeignCollectionField(eager = true)
     private ForeignCollection<EventDate> dates;

}

Класс EventDate:

@DatabaseTable(tableName = "eventdate")
public class EventDate extends BaseDaoEnabled<EventDate, Integer> {

    @DatabaseField(generatedId = true, columnName = "_id")
    int id;

    @DatabaseField(canBeNull = true, foreign = true)
    Event event;

}

А вот код, который я использую, чтобы добавить EventDates и сохранить их:

    Event e2 = eventDao.queryForId(id));

    e2.getDates().clear();
    for (final EventDate date : dates) {
        e2.getDates().add(date);
        e2.getDates().update(date);
    }
    e2.update();

EvenDates правильно добавлены в таблицу sqlite, но поле event_id равно null: EventDates не связаны с Event.

У меня нет сообщения об ошибке. Что я делаю не так ?

Примечание. Я пробовал с нетерпеливой коллекцией (добавляя e2.getDates().updateAll()), но это тоже не работает.


person Name is carl    schedule 25.01.2013    source источник
comment
Вы установили Dao‹T, ID› для объектов, которые хотите обновить?   -  person stephen    schedule 27.01.2013


Ответы (1)


Возможно, здесь отсутствует какая-то функция. Прямо сейчас вам нужно назначить событие на даты вручную, прежде чем добавлять их в коллекцию дат:

e2.getDates().clear();
for (final EventDate date : dates) {
    // this is necessary unfortunately
    date.setEvent(e2);
    e2.getDates().add(date);
}

Я добавил следующий тикет для обзора:

https://sourceforge.net/p/ormlite/feature-requests/31/

person Gray    schedule 29.01.2013
comment
По запросу функция теперь реализована в ormlite 4.43. - person Name is carl; 16.02.2013