休眠是否会导致获取不需要的数据



例如,假设有一个名为"class"的表,许多"Students"属于一个类。如果我们想获得所有学生的名字,那么使用Hibernate,由于我们提取学生对象,姓氏年龄和其他数据(不是惰性加载的)也将被提取。

但是使用sql查询,我们只能获取名字。

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

如果你想在hibernate中获得班级学生的名字,你可以尝试下面的HQL,

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

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

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

select s from Student s where s.divisionId = 4

想象一下,用SQL编写这个查询,并将每一列转换为相应的java属性等。因此,您可以根据自己的需求调整hibernate。

谈到hibernate的性能,它比传统JDBC慢一点,但比JDBC方便有效得多。基本上,您从hibernate中获得的好处压倒了较小的缺点。

您应该了解类似hibernate的Lazy加载中的性能陷阱,并应尽量避免这些陷阱。

是的,Hibernate会获取所有未延迟加载的字段。它对性能的影响取决于应用程序的用例。如果您经常需要包含多列(例如>10)的表中的部分(即仅一列或两列)数据,那么这肯定会增加内存使用率、所需的CPU周期以及传输数据的带宽消耗(如果数据库服务器与应用程序服务器在不同的机器上)。要解决这个问题,可以使用NamedQuery。在命名查询中,您可以只选择所需的列。

相关内容

最新更新