小编use*_*310的帖子

为什么必须将 orm 中双向关系的一侧区分为拥有方?

在一对多关系中,通常用 @ManyToOne 注释的字段是所有者 - 另一侧具有 'mappedBy' 属性。但是,如果我跳过“mappedBy”并使用@JoinColumn(同一列)注释双方,我可以更新双方-更改将传播到db。

我没有两个单向关系而不是一个双向关系 - 只有一个连接列。

如果没有选择一方作为关系所有者,我会遇到什么问题?

我的实体类似于以下内容:

@Entity
public class B {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;


   @ManyToOne
   @JoinColumn(name = "parent_id")
   @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
   private B parent;

   @OneToMany()
   @JoinColumn(name = "parent_id")
   @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
   private List<B> children = new ArrayList<B>();
...
}
Run Code Online (Sandbox Code Playgroud)

它似乎对性能没有任何影响(至少插入看起来没问题)这是一个简单的测试和日志输出:

Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    B a = new B("a");
    B b = new B("b");
    B c = new B("c");
    B d = new B("d");
    B e = new B("e");
    session.save(a);
    session.save(b);
    session.save(c);
    session.save(d); …
Run Code Online (Sandbox Code Playgroud)

orm hibernate jpa bidirectional owner

5
推荐指数
1
解决办法
1334
查看次数

标签 统计

bidirectional ×1

hibernate ×1

jpa ×1

orm ×1

owner ×1