加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – @ManyToOne和@BatchSize

发布时间:2020-12-14 23:32:48 所属栏目:Java 来源:网络整理
导读:我在一些旧代码中找到了奇怪的东西(至少对我而言). 注释@ManyToOne的字段也使用@BatchSize注释. 我一直认为@BatchSize注释仅在类级别或集合(@OneToMany)上注释时影响,并且在迭代时影响预取. 但也许我错了,用@BatchSize注释@ManyToOne会影响某些东西.我在文档
我在一些旧代码中找到了奇怪的东西(至少对我而言).

注释@ManyToOne的字段也使用@BatchSize注释.

我一直认为@BatchSize注释仅在类级别或集合(@OneToMany)上注释时影响,并且在迭代时影响预取.

但也许我错了,用@BatchSize注释@ManyToOne会影响某些东西.我在文档中找不到答案.

使用@BatchSize注释@ManyToOne是否有意义?

解决方法

只有当相应的字段标记为lazy(lazy = true)时,与@BatchSize关联的@ManyToOne才有意义.

实际上,如果字段不是惰性的,那么根据定义已加载,因为加载了封闭实体,因此数据库调用的问题不适用.

想象一下拥有一组ShoesPair元素(ShoesPair.class)的Person类,并且在这一个元素中存在一个标记为lazy的所有者字段(因为在检索特定的一双鞋时,它是可选的并且没有真正带来重要信息).

一个人想要遍历25双鞋子(25个ShoesPair对象)以便找回他们的主人.

如果所有者字段(对应于一个人)仅使用@ManyToOne进行注释,则将有25个选择数据库.

但是,如果使用@BatchSize(size = 5)进行注释,则只会有5个调用,因此性能会提高.

从Hibernate documentation开始,批量大小不仅适用于集合:

You can also enable batch fetching of collections.

Hibenate尤其提到@OneToMany案例,因为这些案例适用于90%的标记为懒惰案例的字段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读