【问题标题】:Trying write a query with ORMLite?尝试使用 ORMLite 编写查询?
【发布时间】:2015-03-13 13:47:49
【问题描述】:

我正在尝试使用 ORMLite 编写查询。我需要这个查询检查其他实体中的客户 ID。我该怎么办?

实体

@DatabaseTable(tableName = "customer")
public class Customer {
     
      @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 Customer customer;

      @DatabaseField
      private Integer status;

      //gets sets
}

查询

Customer customer = new Customer();
customer.setId(1);
customer.setName("Fernando Paiva");

QueryBuilder<Sale, Integer> qb = saleDAO.queryBuilder();
            Where where = qb.where();
            where.eq("sale.customer.id", customer.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() + "");

【问题讨论】:

    标签: android sqlite ormlite


    【解决方案1】:

    你需要使用JOIN

    这是您使用 Join 的示例:

    1. 首先,每个 Dao 都需要一个 QueryBuilder。
    2. 您可以将过滤器分别应用于每个 QueryBuilder
    3. 最后但同样重要的是,您将主 QueryBuilder(销售)与客户的 QueryBuilder 和
    4. 执行查询。

    这里是代码

    Dao<Sale, Integer> saleDao = DaoManager.createDao(getConnectionSource(), Sale.class);
    Dao<Customer, Integer> customerDao = DaoManager.createDao(getConnectionSource(), Customer.class);
    
    QueryBuilder<Sale, Integer> saleQa= saleDao.queryBuilder();
    saleQa.where().eq("status", 1);
    QueryBuilder<Customer, Integer> customerQa = customerDao.queryBuilder();
    customerQa.where().idEq(customer.getId());
    
    sales = saleQa.join(customerQa).query();
    

    【讨论】:

      【解决方案2】:

      您是否尝试使用 OrmLite 来检查客户 ID 是否与销售 ID 相同并获取所有匹配结果?如果是这样,下面的代码将做到这一点

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

      更新:

      重读您的问题后,我意识到您要做什么

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

      有关详细信息,请参阅此问题。 Ormlite Foreign Entity Searching

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 2015-08-08
        • 2011-08-22
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多