我想禁用实体@OneToMany 中的获取

Posted

技术标签:

【中文标题】我想禁用实体@OneToMany 中的获取【英文标题】:i want to disable fetching in an entity @OneToMany 【发布时间】:2019-07-26 20:50:30 【问题描述】:

我有一个单向关联

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "candidate_id", nullable=false)
    private List<Achievement> achievements= new ArrayList<Achievement>();

我想以一种可以在单独的请求中获取关联数据的方式禁用获取 例如:我不希望 hibernate 在每个候选人的查询中返回成就

【问题讨论】:

请清除您的问题并提供更多详细信息 【参考方案1】:

如果我在您拉取对象时理解正确,您不希望成就也从数据库中拉取吗?如果是这种情况,那么你应该使用这个:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "candidate_id", nullable=false)
    private List<Achievement> achievements= new ArrayList<Achievement>();

惰性获取类型不会获取您的一对多关系,因此在这种情况下,如果您获取具有成就的对象,则不会从数据库中获取成就。

【讨论】:

【参考方案2】:

我通过创建一个新的 DTO 层 AchievementsDto 解决了这个问题,该层映射了请求的必要数据并将其作为响应发送。

【讨论】:

【参考方案3】:

你需要使用"com.fasterxml.jackson.annotation.JsonIgnoreProperties;"

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "candidate_id", nullable=false)
@JsonIgnoreProperties("achievements")
private List<Achievement> achievements= new ArrayList<Achievement>();

【讨论】:

但我认为它仍在从他的数据库中获取数据

以上是关于我想禁用实体@OneToMany 中的获取的主要内容,如果未能解决你的问题,请参考以下文章

加入获取嵌套在 @OneToMany 中的 @ManyToOne

如何获取 @OneToMany 和 @ManyToMany 实体

Symfony -- 对 oneToMany 关系中的子记录进行排序

创建父实体时@OneToMany Pesist Child

从 ManyToOne 获取 OneToMany 关联

在 Spring Boot 中使用 JPA 从具有 OneToMany 关系的实体中删除对象