【问题标题】:Having multiple fetching strategies (LAZY, EAGER) by custom condition通过自定义条件具有多种获取策略(LAZY,EAGER)
【发布时间】:2023-01-29 05:27:45
【问题描述】:

我有一个实体类,它由多个外键约束组成,由 ManyToMany 等处理。

public class MyExampleClazz {
.......

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "secondClazzEntities", joinColumns = @JoinColumn(name = "id"),
        inverseJoinColumns = @JoinColumn(name = "id"))
List<MySecondClazz> secondClazz;
  
.....
}

对于某些情况,我想改变获取策略,例如从 EAGER 到 LAZY,反之亦然,因为对于某些读取操作,我不需要 EAGER 获取(想象一个 RESTful 服务,它只提供一小部分数据,而不是所有数据),但在大多数情况下,我需要 EAGER。 一种选择是引入一个实体(对于同一个表)但不同的注释,但它会重复代码和维护方面的工作。

是否有其他方法可以通过更少的工作来达到相同的结果?

【问题讨论】:

  • 将其标记为惰性(为了安全)并使用实体图(获取或加载图)来定义所涉及的特定用例所需的内容。许多教程和问题已经存在(stackoverflow.com/a/31978349/496099

标签: jpa orm java-ee-8


【解决方案1】:

在 JPA 中,您可以在两层中控制数据获取:

  1. 在实体类层面通过fetch type和fetch mode
  2. 在查询级别通过“join fetch”子句或使用@EntityGraph

    我建议您使用 FetchType.LAZY,几乎所有关联都默认使用。并仅在需要时通过@EntityGraph 获取它们。

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2019-11-03
    • 2021-06-02
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2020-10-29
    相关资源
    最近更新 更多