gpt4 book ai didi

java - 所有双向关系都可以是 LAZY 吗?

转载 作者:行者123 更新时间:2023-11-29 08:25:55 24 4
gpt4 key购买 nike

我将 Spring 与 JPA (Hibernate) 结合使用。

当我从许多网站学习关系时(很少有实现它们的方法),也有关于获取类型的讨论,但我在这里提出的问题从未得到完全回答。

我想知道是否存在双向关系不能惰性的情况?单向有时也能不偷懒吗?

举例:假设在一个 Warehouse 中有许多 Box。鉴于这是 ManyToOne 关系(如前所述,实现它的方法很少,为了这个例子,我们假设 Warehouse 是拥有方) - 它可以在两端都是惰性的(你可以加载 Box 和惰性 Warehouse,但是加载 Warehouse 不会加载它拥有的所有 Box,只有当你真正获得它们时才会加载它们)?

这样的代码片段看起来如何 - 我是否只用 JPA 的 LAZY 或其他一些可能是 Hibernate 特定的东西来注释两端?

最佳答案

所有关系都可以是惰性关系,Hibernate 文档建议将所有关系标记为惰性关系:http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#fetching-strategies

The Hibernate recommendation is to statically mark all associations lazy and to use dynamic fetching strategies for eagerness. This is unfortunately at odds with the JPA specification which defines that all one-to-one and many-to-one associations should be eagerly fetched by default. Hibernate, as a JPA provider, honors that default.

您只需将关系的双方都标记为懒惰:

@OneToMany(mappedBy = "...", fetch = FetchType.LAZY)
@OneToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY)

默认的映射(如果你没有指定fetch)是:

OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER

关于java - 所有双向关系都可以是 LAZY 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53190870/

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