我最近在我们的存储库中发现了这样的映射:
@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 方面的专家,而且我从未在教程/指南/文档中看到过这样的映射。我尝试用谷歌搜索这样的映射,但没有找到任何解释。这样映射实体可以吗?
谢谢!
最佳答案
双向一对多和多对一关联映射都可以。但是您应该避免域模型中的单向一对多关联。否则,Hibernate 可能会创建意外的表并执行比预期更多的 SQL 语句。
单向一对多关联的定义似乎不是问题。您只需要一个映射关联和 @OneToMany 关系的属性。
引用 see ref
关于java - JPA/Hibernate 单向 OneToMany 为 'mappedBy',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55376166/