java - 如果我的应用程序需要大量连接查询,我应该使用 ORM
问题描述
我有 3 个实体 i。资产(PK 资产 ID,FK 类别 ID)类别(PK category_id,FK:size_id) iii. 尺寸(PK size_id)
现在每个资产都属于一个类别(多对一),每个类别都有一个大小(多对一)我调用 Asset.getCategory(),它将调用 (SELECT * from category),调用 Caegory.getSize() 将调用 (SE:ECT * from size)
因此,OOP 中的单个实体检索会进行 3 次 DB 调用,就好像我编写了它在 DB 调用上进行的连接查询一样。让我想知道,为什么我们使用 ORM。
解决方案
你的假设是错误的。在 JPA 中,您可以使用“fetch”关键字查询整个对象图,这基本上可以在一次查询中从数据库中获取所有数据。所以你会做类似的事情
entityManager.createQuery("select asset from Asset asset join fetch asset.category cat join fetch cat.size size");
它将在一个查询中获取带有其类别的资产和具有其大小的类别。除了 3 个表很少之外,您通常可以使用基本连接来连接更多表而不会出现性能问题。
推荐阅读
- wpf - 如何使用转换器设置组合框项目的文本?
- android - Hashmap 未附加到适配器
- forms - 在 Symfony 4 上验证用户的正确方法
- angular - Refreshin 角度构建在 Apache 服务器上显示 404 Not Found 错误
- uml - 在所有流都到达合并节点之前,UML 合并节点是否不会退出?
- database - EclipseLink:PostgreSQL 返回空列表作为 text[] 的默认值?
- c# - 创建文件夹结构的副本
- azure-devops - 处理多个项目和一个团队
- java - Java 不能用 replaceAll 方法替换“{”
- csv - 当使用 node-csv-parse 时,你可以指定一些字段是文本限定的,而一些不是?