2015-03-13 40 views
1

我正在尝试使用ORMLite编写查询。我需要这个查询检查其他实体中的custommer的id。我怎么能这样做?尝试使用ORMLite编写查询吗?

实体

@DatabaseTable(tableName = "custommer") 
public class Custommer{ 

     @DatabaseField(generatedId = true) 
     private Integer id; 

     @DatabaseField 
     private String name; 

     @DatabaseField 
     private Sale sale; 

     //gets sets 
} 

@DatabaseTable(tableName = "sale") 
public class Sale{ 

     @DatabaseField(generatedId = true) 
     private Integer id; 

     @DatabaseField 
     private Custommer custommer; 

     @DatabaseField 
     private Integer status; 

     //gets sets 
} 

查询

Custommer custommer = new Custommer(); 
custommer.setId(1); 
custommer.setName("Fernando Paiva"); 

QueryBuilder<Sale, Integer> qb = saleDAO.queryBuilder(); 
      Where where = qb.where(); 
      where.eq("sale.custommer.id", custommer.getId()); 
      where.and(); 
      where.eq("sale.status", 1); 
      PreparedQuery<Sale> pq = qb.prepare(); 
      List<Sale> list = saleDAO.query(pq); 
      Log.i("SALE LIST->", list.size() + ""); 

回答

0

您尝试使用OrmLite检查,如果客户ID是一样的出售ID,并得到所有的匹配结果?如果是的话下面的代码会做

qb.where().eq("id", custommer.id); 
List<Sale> results = saleDAO.query(qb.prepare()); 

更新:

重读你的问题后,我意识到你正在试图做

qb.where().in(Sale.custommer, id); 

详细内容见这个问题是什么。 Ormlite Foreign Entity Searching

1

你需要使用加入到使用JOIN

这里您例如:

  1. 首先,你需要一个QueryBuilder的每一道。
  2. 您可以将您的过滤器,每一个单独的QueryBuilder
  3. 最后但并非最不重要的,你加盟为主QueryBuilder的(销售)与Custommer的QueryBuilder的和
  4. 执行查询。

下面的代码

Dao<Sale, Integer> saleDao = DaoManager.createDao(getConnectionSource(), Sale.class); 
Dao<Custommer, Integer> custommerDao = DaoManager.createDao(getConnectionSource(), Custommer.class); 

QueryBuilder<Sale, Integer> saleQa= saleDao.queryBuilder(); 
saleQa.where().eq("status", 1); 
QueryBuilder<Custommer, Integer> custommerQa = custommerDao.queryBuilder(); 
custommerQa.where().idEq(custommer.getId()); 

sales = saleQa.join(custommerQa).query();