如何解决层次结构中的JPA实体之间的双向关系
我正在为项目使用Spring Data JPA(以hibernate作为提供程序),想知道何时需要在实体之间进行双向映射?
在我的用例中,我有一个CategoryGroup
实体与一个@ManyToOne
实体具有Department
关系。目前,我在@OneToMany
实体中没有对应的Department
关系。从我可以理解的角度看,除非需要通过我的实体/休眠删除,否则我可能不需要这样做。我想知道通过建立双向关系还能得到什么?
这是我的Department
,不包括访问者:
@Entity
@Table(name="dbo.Department")
public class Department
{
@Id
@Column(name="id")
private long id;
@Column(name="name")
private String name;
}
这是CategoryGroup
,不包括访问者:
@Entity
@Table(name="dbo.CategoryGroup")
public class CategoryGroup
{
@Id
@Column(name="id")
private long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="dept_id")
private Department department;
@Column(name="name")
private String name;
public CategoryGroup()
{
}
public CategoryGroup(String name,Department department)
{
this.name = name;
this.department = department;
}
}
作为后续,我的结构本质上是分层的。 Category
实体与@ManyToOne
实体具有CategoryGroup
关系,并且进一步SubCategory
实体与@ManyToOne
实体具有Category
关系。>
如果我继续在关系的父级添加双向关系映射,那是否意味着一旦我检索到Department
,我最终将得到整个实体层次结构直到SubCategory
吗?对于我的用例,这是不希望的。用FetchType.LAZY
标记关系会减轻这种情况吗?
谢谢
解决方法
默认情况下,OneToMany和ManyToMany关联是惰性的,因此添加这些关联时不会获取整个层次结构。
通常,添加这些关联可以极大地帮助您进行查询,因为它减少了根据联接条件进行显式实体联接的需求。除此之外,如果需要,您可以定义删除级联,即,如果删除部门,则可能要删除与其关联的所有类别组。
除了所有这些之外,可能还希望从建模角度明确地将域分开。您可能希望隔离一个单位,即对与其连接的对象一无所知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。