我在一些旧代码中找到了奇怪的东西(至少对我而言).
注释@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.
原文地址:https://www.jb51.cc/java/127582.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。