2012-04-23 70 views
2

有谁知道为了获得更快的搜索查询,哪个是设置OneToMany和ManyToOne关系的Hibernate关系的最佳方法?我应该离开默认关系,使用OneToMany(mappedBy = ...)。或者是否有其他方式可用于获得最佳效果。在休眠状态下设置OneToMany ManyToOne关系的最佳方法

我得到了一个实体树,并希望尽可能快地加载任何给定节点下的所有关系。

回答

-2

我不能告诉你是否在谈论搜索或加载对象图。

许多事情都会提高加载对象图的性能。

1)数据库表上的索引。
2)调整提取策略;避免n + 1选择。
3)二级缓存

索引应该总是对你有所帮助,而且也非常重要。调整提取策略应该会对你有所帮助,而二级缓存可能会对你有所帮助。对于第二和第三,你将不得不收集一些指标来确定最佳路径。

当你说你

要加载任何给定节点以下的所有关系尽可能快。

只是要小心,不要一次加载太多的数据。有时最好编写优化的hql来加载对象图的摘要以呈现给用户,然后当用户选择单个项时加载完整对象。

+0

嗯..反之亦然:你应该避免非n + 1选择。如果您使用连接,则不会触及缓存,如果您阅读的次数多于编写,则会显着降低性能。一般规则:除非您没有通常的要求,否则使用lazy = true&fetch = select。 – 2012-04-23 12:16:17

+0

你是什么意思“反之亦然”。 – hvgotcodes 2012-04-23 14:31:12

+0

你建议避免n + 1选择并使用连接。反之亦然意味着你实际上应该避免在一般情况下的连接,并且使用选择或者子选择来利用二级缓存。 – 2012-04-23 14:44:40