尝试写有ORMLite查询?(Trying write a query with ORMLite?)

2019-10-22 06:29发布

我试着编写使用ORMLite查询。 我需要这个查询检查custommer的ID在其他实体。 我怎么能这样做呢?

实体

@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() + "");

Answer 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();


Answer 2:

你们是不是要使用OrmLite检查,如果客户ID是一样的出售ID,并得到所有的匹配结果? 如果是下面的代码会这样做

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

更新:

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

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

详情参见这个问题。 Ormlite外国实体搜索



文章来源: Trying write a query with ORMLite?