首页 > 解决方案 > 如果我的应用程序需要大量连接查询,我应该使用 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。

标签: javadatabasehibernateormrdbms

解决方案


你的假设是错误的。在 JPA 中,您可以使用“fetch”关键字查询整个对象图,这基本上可以在一次查询中从数据库中获取所有数据。所以你会做类似的事情

entityManager.createQuery("select asset from Asset asset join fetch asset.category cat join fetch cat.size size");

它将在一个查询中获取带有其类别的资产和具有其大小的类别。除了 3 个表很少之外,您通常可以使用基本连接来连接更多表而不会出现性能问题。


推荐阅读