gpt4 book ai didi

jpa - 在双向@OneToOne JPA 关系中,可以在关系的两侧指定获取类型吗?

转载 作者:行者123 更新时间:2023-12-04 02:34:56 27 4
gpt4 key购买 nike

我在 AB 之间有一个双向 @OneToOne 关系。 A 拥有关系。所以,在 A.java 中:

@OneToOne // no need for mappedBy here because A owns this relationship
private B b;

B.java 中:

@OneToOne(mappedBy = "b") // A's "b" field owns this relationship
private A a;

这里我的提取类型选项是什么?它们在每一侧都可以不同吗?也就是说,我可以指定 A 的关系来急切地获取关联的 B,同时告诉 B 延迟获取关联的 A ?

或者,相关的:如果我将 fetch = FetchType.EAGER 放在 B#a 上,它是否得到尊重?在什么情况下?

最佳答案

OneToOne 和 ManyToOne 的默认获取是 EAGER,对于 OneToMany、ManyToMany 和 ElementCollection,它是 LAZY。

您可以使用您想要的任何设置在 mappedBy 的任一侧配置提取,既可以是 LAZY,也可以是 EAGER,也可以是混合。

一般来说,我建议始终使用 LAZY。如果您需要获取某些内容,最好在查询级别指定它,因为您可能并不总是需要它。

LAZY 的实现方式取决于 JPA 提供者。对于 EclipseLink,使用字节码编织,并且需要使用 Java SE 中的代理。在 Java EE 中,它默认工作(在兼容的 Java EE 服务器上)。您也可以使用静态编织。 Spring 还允许在不使用代理的情况下在 Java SE 中进行 JPA 编织。

关于jpa - 在双向@OneToOne JPA 关系中,可以在关系的两侧指定获取类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com