当前位置: 首页 > 知识库问答 >
问题:

层次结构中JPA实体之间的双向关系

白腾
2023-03-14

我正在为我的项目使用Spring Data JPA(以hibernate作为提供程序),并想知道何时需要实体之间的双向映射?

在我的用例中,我有一个Category oryGroup实体,与部门实体具有@ManyToOne关系。目前,我在部门实体中没有相应的@OneTo众多关系。从我所能理解的查看其他帖子,除非我需要通过我的实体/Hibernate删除,否则我可能不需要这样做。我想知道通过双向关系我还能得到什么?

这是我的部门,不包括访问者:

@Entity
  @Table(name="dbo.Department")
  public class Department 
  {
        @Id
        @Column(name="id")
        private long id;
            
        @Column(name="name")
        private String name;
  }

这是类别组,不包括访问器:

@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;
    }
}

如果我一直在关系的父端添加双向关系映射,那么这是否意味着一旦我检索到部门,我最终会得到整个实体层次结构,直到子类别?对于我的用例来说,这是不可取的。将标记与FetchType的关系。懒惰缓解这种情况?

谢啦

共有1个答案

金晗日
2023-03-14

默认情况下,OneTo多人和ManyTo多人关联是惰性的,因此在添加这些关联时不会获取整个层次结构。

通常,添加这些关联可以极大地帮助您进行查询,因为它减少了基于连接条件的显式实体连接的需要。除此之外,如果需要,您还可以定义“删除级联”,也就是说,如果某个部门被删除,您可能希望删除与之关联的所有CategoryGroup。

除此之外,从建模的角度来看,显式分离域可能是可取的。您可能希望部门被隔离,即不知道任何与之连接的对象。

 类似资料:
  • 5.4.1 层次化体系结构 层次化设计是构造复杂系统的一个基本方法,按此方法设计出的系统具有层次化体系结构。现实世界中这种层次化结构俯拾皆是。例如,一幢高楼总是从最底层打基础开始,一层 一层地加高。又如,我国的行政组织具有街道、区、市、省、中央这样的层次化结构。 计算机软件的各个构件也经常组织成这样的层次体系结构。在层次体系中,下层构件为 上层构件提供服务,上层构件使用下层构件的服务,上层和下层之

  • 到目前为止,我们一直在使用Spring JpaRepository来满足我们的需求。我觉得这个新需求需要自定义查询,我不认为可以直接使用JParepository来处理这个问题。我只想知道你是怎么想的。不需要自定义sql查询就可以做到这一点吗?

  • 我试图在用户和地址之间建立双向关系, 用户1-------->*地址 但是 地址1-------->1个用户 我在上网时得到了这些信息 > 对于一对一双向关系,拥有方对应于包含对应外键的方 双向关系的反向侧必须通过使用OneToOne、 OneToMany或ManyToMany批注的mappedBy元素来引用其 所属侧。mappedBy元素指定作为 关系所有者的实体中的属性或字段。 但如果我按照情

  • 问题内容: 我将Play Framework 1.2.4与和一起使用。我想拥有一个模型层次结构,并看到有一些替代方法。 我有一个基类(抽象的)和两个扩展该基类的具体类。我不想坚持这个基础课程,而我想拥有具体的课程。在基类中,我还有另一个Model类作为属性,换句话说,我在基类中有关系。 我的问题是实现此目标的最佳方法是什么?使用或与策略?我有点困惑,因为它们看起来 几乎 相等。 我还担心将来可能会

  • 问题内容: 如何在EJB 3.0实体Bean(JPA)中建立单向关系? 例如,客户了解Order,但是Order没有任何针对客户的方法。使用(@OneToMany或@OneToOne或@ManyToMany) 问候 问题答案: 使用JPA 2.0 建立单向关系的方法如下: 关系型数据库: 顾客: 订购:

  • 在@JoinColumn中的一对多关系中,我从子表中设置name,从父表中设置reference column。但是,当我在上面的person类中用@OneToOne定义相同的单向关系时,我必须从person表而不是从name表中设置@JoinColumn名称。 我的问题是为什么这两个连接条件中的定义名称不同,在一个条件中,我必须将该名称设置为来自同一表的PK列名的名称,而在第二个示例中,我必须设