gpt4 book ai didi

java - 如何加快国外 Collection 的急切加载速度?

转载 作者:行者123 更新时间:2023-12-01 09:16:54 25 4
gpt4 key购买 nike

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

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

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

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

如何处理在 ormlite 中加载急切集合?因为 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 个查询。对主项进行一次查询,然后使用与使用 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

希望这有帮助。

关于java - 如何加快国外 Collection 的急切加载速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40484148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com