如果我的应用程序需要大量的联接查询,我应该使用ORM吗

时间:2018-08-29 16:31:49

标签: java database hibernate orm rdbms

我有3个实体 一世。资产(PK asset_id,FK category_id) ii。类别(PK category_id,FK:size_id) iii。大小(PK size_id)

现在,每个资产都属于一个类别(很多属于一个),并且每个类别都有一个大小(很多属于一个) 在典型的ORM中,我将触发一个用于资产检索的查询,该查询又会调用(SELECT * from asset) 现在当我调用Asset.getCategory()时,它将调用(SELECT * from category) 然后调用Caegory.getSize()将调用(SE:ECT *从大小开始)

因此,OOP中的单个实体检索会进行3个DB调用 好像我写一个联接查询,它使数据库调用。 让我纳闷,为什么我们要使用ORM。

1 个答案:

答案 0 :(得分:1)

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

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

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