Java JPA/Hibernate单向OneToMany as';mappedBy';

Java JPA/Hibernate单向OneToMany as';mappedBy';,java,hibernate,jpa,Java,Hibernate,Jpa,我最近在我们的回购协议中发现了这样的映射: @Entity ... public class Foo{ ... @OneToMany(mappedBy = "someField", cascade = CascadeType.ALL, orphanRemoval = true) public Set<Bar> bars; ... } @Entity @IdClass(Bar.Key.class) ... public class Bar{

我最近在我们的回购协议中发现了这样的映射:

@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;
     }
}
@实体
...
公开课Foo{
...
@OneToMany(mappedBy=“someField”,cascade=CascadeType.ALL,orphan=true)
公共酒吧;
...
}
@实体
@IdClass(Bar.Key.class)
...
公共类酒吧{
@身份证
公共领域;
@身份证
公共领域;
...
静态类键实现可序列化{
公共领域;
公共领域;
}
}
两个表中都没有外键。 我感到惊讶的是,
Bar
类中没有
@ManyToOne
字段,
@OneToMany
没有
@JoinColumn
注释为
mappedBy
。无论如何,它工作得非常完美:没有冗余的更新-就像它是一个双向映射。我不是JPA/Hibernate方面的专家,我从未在教程/指南/文档中见过这样的映射。我试图用谷歌搜索这样的地图,但没有找到任何解释。这样映射实体可以吗?
谢谢

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

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


参考

@MS90问题是“这样映射实体可以吗?”答案是“你应该避免,因为它执行的SQL语句比你预期的要多”。你能详细说明执行的附加SQL语句(需要的那一个)是什么吗@哈立德Shah@MS90我还为此提供了一个链接。您可以从这里阅读示例:)看看这篇文章的“在建模父子关联时使用删除”@哈立德·沙阿。我给了一个很好的链接+1。