我可以在@OneToMany 上使用@JoinColumn 吗?

Posted

技术标签:

【中文标题】我可以在@OneToMany 上使用@JoinColumn 吗?【英文标题】:Can i use @JoinColumn on @OneToMany? 【发布时间】:2020-10-12 01:09:34 【问题描述】:

我有一个有很多“类别”的“分支”:

    @JsonProperty
    @OneToMany(
            cascade = CascadeType.ALL
        )
    @JoinColumn(name="categorie_id")
    @LazyCollection(LazyCollectionOption.FALSE)
    private Collection<Categorie> categorie=new ArrayList<>();
    @JsonProperty
    @ManyToOne
    @JoinColumn(name="branche_id")
    private Branche branche;

我想列出与分支相关的类别!这很好用,但我认为它写得不好。 我不想在 @OneToMany 上使用 mapped By,当我使用它时,我的类别列表不再包含关联的“分支”。

【问题讨论】:

是的,你可以 我在任何地方都看不到mapped by - 可能是错误 使用这些外键? @Antoniossss 而不是 - 你应该在 1 到 X 关系中只有 1 个外键(或者你的模型是一团糟)你确定它不应该是多对多吗? 是的,它是一对多 @Antoniossss 【参考方案1】:

我会尝试这样做

@JsonProperty
@OneToMany(
        cascade = CascadeType.ALL,
        mappedBy = "branche"
    )
private Collection<Categorie> categorie=new ArrayList<>();

  @JsonProperty
    @ManyToOne
    @JoinColumn(name="categorie_id")
    private Branche branche;

假设您有一个模型,其中每个分支只能有 1 个共享类别(并且分支应在 category_id 列中包含类别 ID)

【讨论】:

但是我想在显示类别列表时显示分支! 我试过了,我在 ManyToOne 上添加了 JsonBackReference,在 OneToMany 上添加了 JsonManagedReference,但它仍然显示分支上的类别! 类别s?那里应该只有 1 个类别。 是的,每个分支都有很多类别,当我尝试这个时,我会调用分支,它会显示分支及其类别,我想要的是当我调用类别时,显示它们与每个类别相关联的分支。当我用 JsonManagedReference 反转 JsonBackReference 时,它​​可以工作,但我认为它们不应该反转,JsonBackReference 应该在 @ManyToOne 上,而 JsonManagedReference 在 OneToMany 上。 如果分支有多个类别,并且这些类别可以附加到多个分支,而不是它的多对多。

以上是关于我可以在@OneToMany 上使用@JoinColumn 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hibernate Criteria 连接两个具有 OneToMany 关系的表

如何在 @OneToMany 关系映射的列上使用 JPA findBy 查询?

OneToMany 关系在 Prisma 数据库上工作,但不在服务器上

onetomany 单向与使用 jpa 的可连接设置

使用带有 gilead 的注释通过 gwt 进行休眠时,我收到 oneToMany 关联错误

是否可以使用 Hibernate 或 JPA Annotations 限制 @OneToMany 集合的大小?