java - 如果我的应用程序需要大量连接查询,我应该使用 ORM

标签 java database hibernate orm rdbms

我有 3 个实体 一世。 Assets (PK asset_id,FK category_id) 二.类别(PK category_id,FK:size_id) 三.尺码(PK size_id)

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

因此 OOP 中的单个实体检索进行 3 次数据库调用 就好像我写了一个连接查询,它在数据库调用上进行。 让我想知道,为什么我们使用 ORM。

最佳答案

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

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

这将在一次查询中获取 Assets 及其类别,以及该类别及其大小。除了 3 个表非常少之外,您通常可以通过基本连接连接更多的表而不会出现性能问题。

关于java - 如果我的应用程序需要大量连接查询,我应该使用 ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52082213/

相关文章:

hibernate 异常 : Connection Pool exhausted error after Spring upgrade

java - 如何在 Hibernate 中插入外键定义为 Long 的实体?

java - 在 github 存储库上使用 intellij IDEA 而不是 netbeans

java字符串池入口和堆入口机制

sql - 数据库内的地址标准化

android - Sqlite Android 中的斜体/粗体字体

java - Hibernate - 强制父类和子类之间的内部连接

java - Spring Boot Redis生菜异常

java - SourceToHTMLConverter.class 是否已从 java 7 中删除?

mysql - 如何为每个注册的新用户启动自动增量