我有两个组合框连接到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);
});
答案 0 :(得分:0)
我的问题是,当我从第一个组合框中选择内容时,我可以使用哪种方法来过滤第二个组合框中的数据。
如果我理解,这是documentation for ORMLite很好地涵盖了异物的教科书示例。在文档的示例中,他们有Account
和Order
,在您的示例中,CarBrand
和CarModel
。
引用文档:
您可以通过几种不同的方式查询外部字段。以下示例显示了查询与特定帐户字段匹配的所有订单的代码。由于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();