如何加快外国 collections 的预加载?

How to speed up eager loading of foreign collections?

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

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

加载所有 objects

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

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

如何在 ormlite 中处理 loading eager collections?因为 queryForAll 不是办法..

Problem is when loading all data from this table ... ORMlite is creating query for every item instead using joins. Which is resulting in 67124 queries and taking forever to load all objects from this table.

ORM_Lite_ 是有原因的。很多人都要求加入对外国 collection 的支持,但我还没有做到。不容易。

如果您仍想使用 ORMLite,那么我建议 不要 使用 eager = true 并改为执行 2 个查询。一个查询您的主要项目,然后另一个查询使用与 collection 实体关联的 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

希望对您有所帮助。