ORMLite чужое поле пустое при создании, а не пустое при запросе - PullRequest
0 голосов
/ 14 марта 2012

При записи экземпляра моего класса данных в базу данных через ORMLite, когда один из дочерних элементов (внешнее поле) имеет значение null, я возвращаю ненулевой дочерний элемент.

Классы данных следующим образом:

public class Site {
    //  snip
    @DatabaseField(foreign = true, canBeNull = true)
    private InstallationType installationType;
}

public class InstallationType {   
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField
    private String name;
}

Когда я снова читаю свой экземпляр класса Site с помощью

getSiteDao().queryForId(id);

, элемент installationType не равен NULL, но с несуществующим идентификатором.Единственный способ, которым остальная часть нашего приложения теперь может работать с этим объектом, - это если я вручную выполню поиск через InstallationTypeDAO и установлю, что я получу обратно на сайт.Запрос иногда возвращает нуль согласно документации .

Есть ли способ заставить ORMLite установить для этого элемента значение null?

1 Ответ

1 голос
/ 14 марта 2012

Это было ошибкой в ​​ ORMLite , которая была исправлена ​​в версии 4.15 (3/7/2011).Вот файл журнала изменений .Какую версию ты используешь?Вы пытались обновить?Вот страница отчета об ошибке :

В настоящее время следующий тест проходит успешно, поэтому я думаю, что у нас есть хорошее покрытие по этой ошибке.

@Test
public void testForeignNull() throws Exception {
    Dao<Foreign, Integer> dao = createDao(Foreign.class, true);
    Foreign foreign = new Foreign();
    foreign.foo = null;
    assertEquals(1, dao.create(foreign));
    Foreign foreign2 = dao.queryForId(foreign.id);
    assertNotNull(foreign2);
    assertNull(foreign2.foo);
}

С Foreign, имеющим следующееполя:

@DatabaseField(generatedId = true)
public int id;
@DatabaseField(foreign = true)
public Foo foo;

Если у вас есть последние версии, пожалуйста, дайте мне знать, если вы можете изменить тест, чтобы он провалился.

...