我有一个用ORMlite映射的数据库表,它包含一些数据(18列),它还包含ForeignCollectionField(eager = true)
。
问题是从此表加载所有数据时... ORMlite正在使用连接为每个项创建查询。这导致了67124次查询并永远从该表中加载所有对象。
然而,这可以在几秒钟内在右连接查询中完成?为什么要生成数千个查询呢?
如何加快速度?我是否必须编写原始查询然后编写RawRowMapper,这使得使用ORM毫无意义..
如何处理在ormlite中加载渴望的集合?因为queryForAll
不是..
答案 0 :(得分:1)
问题是从此表加载所有数据时... ORMlite正在使用连接为每个项创建查询。这导致了67124次查询并永远从该表中加载所有对象。
原因是ORM_Lite_。很多人都要求加入对外国收藏品的支持,但我还没有得到它。这不容易。
如果您仍想使用ORMLite,那么我建议不使用eager = true
并执行2次查询。使用IN
使用与集合实体关联的DAO对主项目进行一次查询,然后进行另一次查询。类似的东西:
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
希望这有帮助。