gpt4 book ai didi

java - 仅在一侧使用 ID 的双向映射

转载 作者:太空宇宙 更新时间:2023-11-04 13:06:55 26 4
gpt4 key购买 nike

我有两个类(class),家长类(class)和 child 类(class)

@Entity
class Parent {

@Id
private long id;

@OneToMany
private List<Children> children;

}

@Entity
class Children {

@Id
private int id;

@ManyToOne
private Parent parent; //Normal bi-directional mapping
// OR
private long parentId; //just keeping reference to parent (kind of bi-directional)
}

要求

我确实需要双向导航。但从 child 到 parent 的导航访问并不重要。偶尔会用到它来做一些操作。从父级到子级的导航访问在应用层非常重要,也是核心业务逻辑的一部分。

  1. 保留双向映射在这里有意义吗?
  2. 如果是,那么只在 child 中保留 parent 的 ID 有意义吗?我担心如果将整个父实体映射到子实体,可能会遇到复杂的情况。

据我了解,映射实体或仅映射父级的 ID 不会对数据库存储产生任何影响,因为在这两种情况下,数据库只会为其保留一列(在映射实体的情况下作为外键,在仅保留 id 的情况下作为普通的列parentId)。

但是,如果我明确告知数据库两个实体之间的双向关系,我可能会获得一些性能?

PS:忽略缺少的注释和其他参数以在语法上完成映射。问题不是“我应该如何”,而是“我应该”吗?

最佳答案

您通常使用 Hibernate 执行的操作是:

子类

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parent_id")
private Parent parent;

即,您仅加入 id,但分别存储整个父对象

父类

@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
private List<Children> children = new ArrayList<Children>();

回答你的第一个问题:是的,双向映射是有意义的,因为显然存在连接。

编辑:虽然映射并不完美,因为 child 通常没有一个 parent ,而是两个。 ;)

关于java - 仅在一侧使用 ID 的双向映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34334507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com