【问题标题】:JPA/Hibernate Unidirectional OneToMany as 'mappedBy'JPA/Hibernate 单向 OneToMany 为“mappedBy”
【发布时间】:2019-03-27 11:31:47
【问题描述】:

我最近在我们的 repo 中发现了这样的映射:

@Entity
...
public class Foo{
     ...
     @OneToMany(mappedBy = "someField", cascade = CascadeType.ALL, orphanRemoval = true)
     public Set<Bar> bars;
     ...
}

@Entity
@IdClass(Bar.Key.class)
...
public class Bar{
     @Id
     public long someField;
     @Id
     public long anotherField;
     ...
     static class Key implements Serializable {
        public long someField;
        public long anotherField;
     }
}

两个表中都没有外键。 我很惊讶Bar 类中没有@ManyToOne 字段,并且@OneToMany 在没有@JoinColumn 的情况下被注释为mappedBy。无论如何,它工作得很好:没有多余的更新——就像它是一个双向映射。我不是 JPA/Hibernate 方面的专家,而且我从未在教程/指南/文档中看到过这样的映射。我试图用谷歌搜索这样的映射,但没有找到任何解释。可以像这样映射实体吗? 谢谢!

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    双向一对多和多对一关联映射都很好。但是您应避免在您的域模型中使用单向一对多关联。否则,Hibernate 可能会创建意外的表并执行比预期更多的 SQL 语句

    单向一对多关联的定义似乎不是问题。您只需要一个映射关联和@OneToMany 关系的属性。

    参考 see ref

    【讨论】:

    • @MS90 问题是“这样映射实体可以吗?”答案是“你应该避免,因为它执行的 SQL 语句比你预期的要多”。
    • 您能否详细说明执行了哪些额外的 SQL 语句(需要的那个)? @Khalid Shah
    • @MS90 我也为此提供了一个链接。你可以从那里阅读示例:)
    • 查看该文章的在对父子关联进行建模时使用 orphanRemoval 部分。 @Khalid Shah。我为不错的链接 +1。
    猜你喜欢
    • 2017-01-23
    • 2022-08-16
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多