在hibernate以及简单的ORM策略中,我通常会加载对象的所有值。有什么办法可以避免这种情况。 由于这个我的应用程序运行缓慢..
答案 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);