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

标签 java performance sqlite ormlite foreign-collection

我有一个使用 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/

相关文章:

performance - 如何实现 super 优化器

java - 将 View 声明为不可见或将背景设置为透明并在需要时更改其背景资源是否更有效?

java - 如何在android中创建自定义开关控件

java - 如何使用 Java 生成电子邮件以获取公钥和私钥

java - Selenium 等待一个元素

java - 从 Assets 文件夹或 SD 卡访问文件有什么区别

java - 传统命令式编程风格与函数式编程风格的区别

android - sqlite 游标返回列的错误值

javascript - HTML 中弹出消息的函数

c++ - 带有非托管 SQLite 的混合 C++/CLI 代码