ORMLite外部字段在创建时为null,在查询时不为null

时间:2012-03-14 11:52:29

标签: android ormlite

当通过ORMLite将数据类的实例写入数据库,并且其中一个子成员(外部字段)为null时,我返回一个非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,但ID不存在。我们的应用程序的其余部分现在可以使用此对象的唯一方法是,如果我通过InstallationTypeDAO手动执行查找并设置我在网站上返回的内容。查询有时会根据the documentation返回null。

有没有办法让ORMLite将此成员设置为null?

1 个答案:

答案 0 :(得分:1)

ORMLite中的一个错误,已在4.15版(2011年3月7日)中修复。这是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;

如果您是最新的版本,请告诉我您是否可以更改测试以使其失败。