例如,假设有一个名为“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/