问题描述
为了避免一些情况下,关联关系所带来的无谓的性能开销。Hibernate引入了延迟加载的概念。如,示例中user对象在加载的时候,会同时读取其所关联的多个地址(address)对象,对于需要对address进行操作的应用逻辑而言,关联数据的自动加载机制的确非常有效。但是,如果我们只是想要获得user的性别(sex)属性,而不关心user的地址(address)信息,那么自动加载address的特性就显得多余,并且造成了极大的性能浪费。为了获得user的性别属性,我们可能还要同时从数据库中读取数条无用的地址数据,这导致了大量无谓的系统开销。延迟加载特性的出现,正是为了解决这个问题。所谓延迟加载,就是在需要数据的时候,才真正执行数据加载操作。对于我们这里的user对象的加载过程,也就意味着,加载user对象时只针对其本身的属性,而当我们需要获取user对象所关联的address信息时(如执行user.getAddresses时),才真正从数据库中加载address数据并返回。我们将前面一对多关系中的lazy属性修改为true,即指定了关联对象采用延迟加载:<hibernate-mapping><classname="org.hibernate.sample.TUser"table="t_user"dynamic-update="true"dynamic-insert="true">.......<setname="addresses"table="t_address"lazy="true"inverse="false"cascade="all"sort="unsorted"order-by="zipcodeasc"><keycolumn="user_id"></key><one-to-manyclass="org.hibernate.sample.TAddress"/></set>……</class></hibernate-mapping>