我们如何减少不必要的物体装载?

时间:2009-08-17 12:32:41

标签: java performance hibernate orm

在hibernate以及简单的ORM策略中,我通常会加载对象的所有值。有什么办法可以避免这种情况。 由于这个我的应用程序运行缓慢..

3 个答案:

答案 0 :(得分:2)

有几种方法可以实现这一目标:

  • 启用缓存。虽然SQL不会改变,但Hibernate将比较数据库的结果并重用现有的对象。这并没有带来巨大的推动,但实施和维护起来很简单。

  • 创建第二个映射(相同的表,不同的对象)以仅加载值的子集。

  • 将很少使用的数据移到第二个表格中。

  • 使用自定义本机SQL查询加载对象。在这里,您必须确保知道装载了多少以及如何“填补空白”。

答案 1 :(得分:2)

Hibernate参考文档有一章Improving Performance。您可以查看提取策略或使用缓存是否可以提高性能。

更具体地说,您需要提供有关应用程序的更多详细信息以及如何使用通过ORM加载的对象。

答案 2 :(得分:0)

在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);