2015-03-13 83 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();