我有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 * 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个表非常少之外,通常可以通过基本连接加入更多表而不会出现性能问题。