【发布时间】:2009-08-17 12:32:41
【问题描述】:
在休眠和简单的 ORM 策略中,我通常会加载对象的所有值。有什么办法可以避免这种情况。 因此,我的应用程序运行缓慢..
【问题讨论】:
标签: java performance hibernate orm
在休眠和简单的 ORM 策略中,我通常会加载对象的所有值。有什么办法可以避免这种情况。 因此,我的应用程序运行缓慢..
【问题讨论】:
标签: java performance hibernate orm
有几种方法可以实现这一点:
启用缓存。虽然 SQL 不会改变,但 Hibernate 将比较来自数据库的结果并重用现有对象。这不会带来巨大的提升,但它很容易实现和维护。
创建第二个映射(相同的表,不同的对象)以仅加载值的子集。
将很少使用的数据移到第二个表中。
使用自定义本机 SQL 查询加载您的对象。在这里,您必须确保知道已加载了多少以及如何“填补空白”。
【讨论】:
Hibernate 参考文档有一章关于Improving Performance。您可以查看您的获取策略或使用缓存是否会提高性能。
更具体地说,您需要提供有关您的应用程序以及如何使用通过 ORM 加载的对象的更多详细信息。
【讨论】:
在 yoru 实体映射中使用 FetchType.LAZY。 即:
@Entity
public class MyEntity {
private List<MyAnotherEntity> values;
@ManyToOne(fetch = FetchType.LAZY)
public List<MyAnotherEntity> getValues() {
return values;
}
}
然后,当您选择具有条件的实体时,如果您需要将集合映射到对象,则需要设置获取模式。
Criteria c = createCreteria(entityManager, MyEntity.class);
c.setFetchMode("values", FetchMode.JOIN);
【讨论】: