我有两个班,父母和孩子
@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)
}
要求
我确实需要双向导航访问。但是从孩子到父母的导航访问并不重要。它将偶尔用于做一些操作。从父级到子级的导航访问在应用程序层和核心业务逻辑的一部分中非常重要。
据我所知,映射实体或只是父代的Id不会对数据库存储产生任何影响,因为在这两种情况下数据库只保留一列(在映射实体的情况下作为外键) ,以及保持只是id的正常列-parentId。
但是,如果我明确告知数据库有关两个实体之间的双向关系,我可能会获得一些性能吗?
PS: 忽略缺少的注释和其他参数以完全按语法完成映射。问题不在于“我应该如何”,而是“我应该”?
答案 0 :(得分:0)
您通常使用Hibernate做的是:
Child.class
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parent_id")
private Parent parent;
即,您只加入id,但分别存储整个父对象
Parent.class
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
private List<Children> children = new ArrayList<Children>();
回答你的第一个问题:是的,双向映射是有意义的,因为显然存在连接。
编辑:虽然映射并不完美,因为孩子通常没有一个父母,而是两个。 ;)