2011-09-08 166 views
2

我有两个实体:EntityA和EntityB。 EntityB有EntityA的洋场:ORMLite:查询空白字段

@DatabaseField(foreign=true, columnName=ENT_A_NAME) 
private EntityA entityA; 

现在我想查询EntityB的所有条目,其中EntityA为空。所以我做了以下查询:

bDao.queryBuilder().where().isNull(EntityB.Ent_A_NAME).prepare(); 

如果我执行查询,我得到一个空的结果集。

如果我执行queryAll()我看到EntityB的条目始终有一个关联的Order-Object,其所有值都设置为null/0。

如何执行我的查询?

回答

1

我不确定@ Toni4780。以下测试案例适用于我。我没有看到你做错了什么。

在表EntityBORMLite实际存储ID的EntityA所以我想知道,如果它是空或0你有没有试过以下?

bDao.queryBuilder().where().eq(EntityB.Ent_A_NAME, 0).prepare(); 

或两个:

bDao.queryBuilder().where().isNull(EntityB.Ent_A_NAME). 
    or().eq(EntityB.Ent_A_NAME, 0).prepare(); 

这里是我的单元测试代码的工作:

Dao<Order, Integer> orderDao = 
    DaoManager.createDao(connectionSource, Order.class); 
TableUtils.createTable(connectionSource, Order.class); 
int numOrders = 10; 
for (int orderC = 0; orderC < numOrders; orderC++) { 
    Order order = new Order(); 
    order.val = orderC; 
    assertEquals(1, orderDao.create(order)); 
} 
List<Order> results = orderDao.queryBuilder().where() 
    .isNull(Order.ACCOUNT_FIELD_NAME).query(); 
assertNotNull(results); 
assertEquals(numOrders, results.size()); 
+0

确定。现在它使用了isNull()和eq()。(..,0)。奇怪的是,一些(2)项目返回isNull()和其他(5)项目与eq()返回。一个旁注:我真的很喜欢ormlite。保持良好的工作 :) – Toni4780