2
有谁知道为了获得更快的搜索查询,哪个是设置OneToMany和ManyToOne关系的Hibernate关系的最佳方法?我应该离开默认关系,使用OneToMany(mappedBy = ...)。或者是否有其他方式可用于获得最佳效果。在休眠状态下设置OneToMany ManyToOne关系的最佳方法
我得到了一个实体树,并希望尽可能快地加载任何给定节点下的所有关系。
有谁知道为了获得更快的搜索查询,哪个是设置OneToMany和ManyToOne关系的Hibernate关系的最佳方法?我应该离开默认关系,使用OneToMany(mappedBy = ...)。或者是否有其他方式可用于获得最佳效果。在休眠状态下设置OneToMany ManyToOne关系的最佳方法
我得到了一个实体树,并希望尽可能快地加载任何给定节点下的所有关系。
我不能告诉你是否在谈论搜索或加载对象图。
许多事情都会提高加载对象图的性能。
1)数据库表上的索引。
2)调整提取策略;避免n + 1选择。
3)二级缓存
索引应该总是对你有所帮助,而且也非常重要。调整提取策略应该会对你有所帮助,而二级缓存可能会对你有所帮助。对于第二和第三,你将不得不收集一些指标来确定最佳路径。
当你说你
要加载任何给定节点以下的所有关系尽可能快。
只是要小心,不要一次加载太多的数据。有时最好编写优化的hql来加载对象图的摘要以呈现给用户,然后当用户选择单个项时加载完整对象。
嗯..反之亦然:你应该避免非n + 1选择。如果您使用连接,则不会触及缓存,如果您阅读的次数多于编写,则会显着降低性能。一般规则:除非您没有通常的要求,否则使用lazy = true&fetch = select。 – 2012-04-23 12:16:17
你是什么意思“反之亦然”。 – hvgotcodes 2012-04-23 14:31:12
你建议避免n + 1选择并使用连接。反之亦然意味着你实际上应该避免在一般情况下的连接,并且使用选择或者子选择来利用二级缓存。 – 2012-04-23 14:44:40