performance - Hibernate 会导致获取不需要的数据吗?

标签 performance hibernate lazy-loading

例如,假设有一个名为“Class”的表,并且很多“Students”属于一个类(class)。如果我们想获取所有学生的名字,使用 Hibernate 因为我们获取 Student 对象、姓氏年龄 和其他数据(不是延迟加载的)也将被获取。

但是通过 sql 查询,我们只能获取名字。

那么这是否意味着使用 Hibernate 会导致获取不需要的数据?如果是这样,它不会对系统性能产生很大影响吗?

最佳答案

如果你想在 hibernate 中获取类(class)中学生的名字,你可以尝试以下 HQL ,

select s.firstName from Student s where s.divisionId = 4

这将为您提供仅学生名字的列表。因此,不会加载姓氏、年龄等。 因此对于您问题中的场景,您可以使用 hibernate 获得良好的性能。

现在当您需要 List<Students> 时第 4 部分的用户使用以下查询,

select s from Student s where s.divisionId = 4

想象一下在 SQL 中编写此查询并将每一列转换为其相应的 java 属性等。所有这些都是 hibernate 在上面为您完成的。 因此,您可以根据需要调整 hibernate 。

就hibernate的性能而言,它比传统的JDBC慢了一点点,但比JDBC方便和有效得多。基本上,您从 hibernate 中获得的好处可以抵消较小的缺点。

你应该像 Lazy loading 一样了解 hibernate 中的性能陷阱并且应该尽量避免这些。

关于performance - Hibernate 会导致获取不需要的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441091/

相关文章:

java - 使用 Java、Spring 和 Hibernate 将 MySQL View 转换为 CSV 文件

javascript - jQuery.Lazy() : Plugin is not loading my 'li' contents

ios - SDWebImage是否支持 "not-when-fast-scrolling"(略读)延迟加载?

java - 获取所有 spring 服务的性能指标的最快方法是什么?

java - 与 "iteration is linear in the sum of the number of entries and the number of buckets"混淆

mysql - 此查询或我的数据库有什么问题?糟糕的表现

java - Hibernate 与同一类对象的多个 @OneToOne 关系存在问题

mysql - 可以找到阿拉伯语拼写错误的 SQL 查询

hibernate - Grails域映射异常

java - 真正调用bean后的spring懒加载