0

我有一个用 ORMlite 映射的数据库表,它包含一些数据(18 列),它还包含ForeignCollectionField(eager = true).

问题是从该表中加载所有数据时...... ORMlite 正在为每个项目创建查询,而不是使用连接。这会导致 67124 次查询,并且需要永远加载该表中的所有对象。

然而,这可以在几秒钟内在右连接查询中完成吗?为什么要生成数千个查询?

我怎样才能加快速度?我是否必须编写原始查询然后 RawRowMapper ,这使得使用 ORM 毫无意义..

如何处理在 ormlite 中加载急切的集合?因为queryForAll不是办法..

4

1 回答 1

1

问题是从该表中加载所有数据时...... ORMlite 正在为每个项目创建查询,而不是使用连接。这会导致 67124 次查询,并且需要永远加载该表中的所有对象。

它是 ORM_Lite_ 是有原因的。很多人要求加入支持外国收藏,但我还没有得到它。这是不容易的。

如果您仍想使用 ORMLite,那么我建议您不要使用eager = true并执行 2 个查询。一个查询主要项目,然后另一个查询使用与集合实体关联的 DAO,使用IN. 就像是:

qb = accountDao.queryBuilder();
qb.where()...;
List<Account> accounts = qb.query();

// build a list of account-ids
List<Long> accountIds = new ArrayList<>();
for (Account account : accounts) {
    accountIds.add(account.getId());
}

// now use this list of ids to get your other entities
List<Order> orders = orderDao.queryBuilder().where().in("accountId", accountIds).query();
// now you have a list of orders for all of your ids
// you will need to associate each order with its account

希望这可以帮助。

于 2016-11-15T23:23:42.220 回答