我应该使用什么DAO方法?

时间:2018-04-04 16:59:12

标签: java javafx dao ormlite

我有两个组合框连接到ORMLite中的两个DatabaseTables。例如,第一个组合框显示品牌(来自brands_table),第二个显示模型(来自models_table)。 Models_table还有brandIield和brandId。当我保存新记录时,我必须首先选择品牌,然后选择模型。

对于两个组合框中的初始化和设置数据,我使用DAO中的 queryForAll 方法。

我的问题是,当我从第一个组合框中选择内容时,我可以使用哪种方法来过滤第二个组合框中的数据。我在考虑 queryForEq queryForMatching

现在正常的初始化是:

public void initializeModelsList() throws ApplicationException {
    CarModelDao carModelDao = new CarModelDao(DBManager.getConnectionSource());
    List<CarModel> listOfModels = carModelDao.queryForAll(CarModel.class);
    modelsList.clear();
    // loop
    listOfModels.forEach((c) -> {
        // create new object ModelsFX model
        ModelsFX modelsFX = ConverterModels.convertToModelFX(c);
        this.modelsList.add(modelsFX);

我在想的是:

public void initializeFilteredModelsList() throws ApplicationException {
    CarBrandDao carBrandDao=new CarBrandDao(DBManager.getConnectionSource());
    CarBrand tempCarBrand = carBrandDao.findById(CarBrand.class, this.getModelsFxObjectProperty().getBrandsFXObjectProperty().getId());
    //it returns int with ID

    CarModelDao carModelDao = new CarModelDao(DBManager.getConnectionSource());
    List<CarModel> listOfFilteredModels = carModelDao.//searching for same ID in foreignField(brand_ID) in models_table
    listOfFilteredModels.forEach((c) -> {
        // create new object ModelsFX model
        ModelsFX modelsFX = ConverterModels.convertToModelFX(c);
        this.modelsList.add(modelsFX);
    });

1 个答案:

答案 0 :(得分:0)

  

我的问题是,当我从第一个组合框中选择内容时,我可以使用哪种方法来过滤第二个组合框中的数据。

如果我理解,这是documentation for ORMLite很好地涵盖了异物的教科书示例。在文档的示例中,他们有AccountOrder,在您的示例中,CarBrandCarModel

引用文档:

  

您可以通过几种不同的方式查询外部字段。以下示例显示了查询与特定帐户字段匹配的所有订单的代码。由于id字段是名称字段,因此您可以通过帐户的名称字段进行查询:

// query for all orders that match a certain account
List<Order> results = orderDao.queryBuilder().
    where().eq("account_id", account.getName()).query();
  

或者你可以让ORMLite从帐户本身中提取id字段。这将执行与上述相同的查询:

// ORMLite will extract and use the id field internally
List<Order> results = orderDao.queryBuilder().where().eq("account_id", account).query();