当前位置: 首页 > 面试题库 >

@ManyToOne和@BatchSize

艾修然
2023-03-14
问题内容

我在一些旧代码中发现了奇怪的事情(至少对我而言)。

@ManyToOne带注释的字段也用注释@BatchSize

我一直以为@BatchSize注释仅在类级别或集合(@OneToMany)上进行注释时才受影响,而在迭代时则影响 预取

但是,也许我错了,并标注@ManyToOne@BatchSize影响的东西。我在文档中找不到答案。

是否标注@ManyToOne@BatchSize有感觉?


问题答案:

@ManyToOne``@BatchSize仅当相应字段标记为lazylazy=true)时,与关联的内容才有意义。

的确,如果该字段不是lazy,则根据定义,由于装入了实体,因此该字段已经被加载,因此html" target="_blank">数据库调用的问题不适用。

想象一下一个Person类,其中有一个ShoesPair元素集合(ShoesPair.class),并且其中一个owner字段被标记为惰性字段(由于是可选字段,因此在检索特定的鞋子时并没有带来重要的信息)。

一个人想要遍历 25 双鞋(25个ShoesPair对象)以找回它们的所有者。

如果该owner字段(对应一个人)仅用注释@ManyToOne,则数据库中将有 25个 选择。

但是,如果用注释@BatchSize(size=5),将只有 5个 调用,因此可以提高性能。

从Hibernate文档中可以看出,批处理大小不仅适用于集合:

您还 可以 启用集合的批量提取。

Hibenate特别提到了一些@OneToMany案例,因为在90%的案例中,这些字段都标记为lazy



 类似资料:
  • 我正在尝试创建一个“简单”的一个或多个或多个的关系。我得到以下例外情况: 有人能告诉我我做错了什么吗? 下面你可以找到我的两个实体。 提前谢谢你。 而且

  • 我最近开始研究Hibernate,并在研究映射。在我的场景中,我有一个可以拥有多辆车的用户。在执行双向映射时,在第二个表中生成的列,因为如果使用此双向映射,我将获得空值。我试过调试,但没用。 用户etails.java 交通工具Java语言 冬眠之石。Java语言 输出: 我也发现这有点难以理解为什么我们应该选择双向而不是单向映射。

  • 我需要对OneToOne和ManyToOne关系的几个JoinColumns设置唯一的约束,但Hibernate似乎没有找到这些列,即使我在@JoinColumn注释中正确设置了名称。这对我来说似乎很奇怪,因为相同的约束在LiquiBase中工作得很好。 在抛出的异常日志下面:

  • 在JPA中,实体的字段是否可能同时具有@ManyTomany和@ManyToOne注释? 这是我的桌子: 这是我的实体(简化的ofc): 我会尽力解释: > @ManyToOne:Entity2和Entity3都有一个引用Entity1的字段。所以有一个多对一的关系。 所以有了这个,我想我必须使用@ManyTomany。但我发现了一些错误。 所以我想知道:这有可能把@ManyTomany和@Man

  • 我在Spring Boot JPA应用程序中有以下设置: 可嵌入 原因:org.hibernate.AnnotationException:mappedBy引用了未知的目标实体属性:com.foobar.entity.logSearchHistoryAttr.logSearchHistoryAttrs中的com.foobar.entity.logSearchHistoryAttr.logSearc

  • 我试图建立简单的一对多关系,但hibernate抛出了错误,不知道该怎么办。 类产品: 和类用户: 我遇到了错误:通过JDBC语句执行DDL“alter table products drop constraint fk_user”时出错