java - 对象关系映射的缺点

标签 java ruby-on-rails hibernate activerecord orm

我是 ORM 的粉丝 - 对象关系映射,在过去一年半的时间里,我一直在将它与 Rails 结合使用。在此之前,我曾经使用 JDBC 编写原始查询,并通过存储过程让数据库完成繁重的工作。使用 ORM,我最初很乐意做像 coach.managermanager.coaches 这样非常简单易读的东西。

但随着时间的推移,无数的关联逐渐增加,我最终做了 a.b.c.d,它在幕后向各个方向发射查询。使用 rails 和 ruby​​,垃圾收集器变得疯狂并花费疯狂的时间来加载涉及相对较少数据的非常复杂的页面。我不得不用一个简单的存储过程替换这个 ORM 样式代码,我看到的结果是巨大的。加载需要 50 秒的页面现在只需 2 秒。

如此巨大的差异,我是否应该继续使用 ORM?很明显,与原始查询相比,它有严重的开销。

一般来说,使用 Hibernate、ActiveRecord 等 ORM 框架的一般陷阱是什么?

最佳答案

ORM 只是一个工具。如果你不正确地使用它,你会得到不好的结果。

没有什么能阻止您使用专用的 HQL/条件查询,通过提取连接或投影,返回您的页面必须在尽可能少的查询中显示的信息。这将花费与专用 SQL 查询大致相同的时间。

当然,如果您只是通过 ID 获取所有内容并在您的对象中导航而没有意识到它生成了多少查询,这将导致加载时间过长。关键是要确切地知道 ORM 在幕后做了什么,并决定它是否合适或者是否必须采用其他策略。

关于java - 对象关系映射的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334287/

相关文章:

java - 闪屏安卓

ruby-on-rails - 按两个属性排序,其中一个在子模型中(rails 4)

java - Hibernate DateCreated,DateModified 列来自 DB 而不是 VM(App)

java - 在 Hibernate 中获取 JDBC 结果集

java.lang.IllegalStateException : Multiple representations of the same entity with @ManyToMany 3 entities

java - android上非 Activity InputConnection警告上的getExtractedText

ruby-on-rails - 将 'material-ui' 与 React-rails gem 一起使用?

java - 删除父实体而不删除子实体 (jpa)

java - 相机拍的照片越来越模糊

ruby-on-rails - 连接到多个数据库时,ActiveRecord 似乎会泄漏内存