2012-03-14 4 views
0

При записи экземпляра моего класса данных в базу данных через ORMLite, и один из дочерних элементов (чужое поле) имеет значение null, я возвращаю ненулевой дочерний элемент ,ORMLite foreign field null on create, not null on query

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

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; 
} 

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

getSiteDao().queryForId(id); 

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

Есть ли способ получить ORMLite, чтобы установить этот элемент в null?

ответ

1

Этот был ошибкой в ​​ORMLite, который был исправлен в версии 4.15 (3/7/2011). Вот change log file. Какую версию ты используешь? Вы пытались обновить? Вот bug report page:

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

@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; 

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

+0

Я использую 4.30. (Версия, которая была упакована с примером HelloAndroidNoBase.) Попробуй 4.35 сейчас. – Diederik

+0

Обновление до 4.35 исправлено. Спасибо, Грей. – Diederik