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

Spring Boot JPA:多对多关系作为它自己的类?

贺波
2023-03-14

我正在使用Spring Boot和JPA,两个表之间存在多对多关系。这种关系也需要有自己的属性,所以我必须将这种关系作为自己的类。我也有所有类的存储库。此外,在使用非基本字段时,如何正确映射外键?

我的问题是:我如何认识到这一点,以便Spring boot不会给我一个错误?我对Spring Boot和JPA都是新手。下面是一段代码片段:

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

@Entity //this is a relationship type. Does an annotation for relationship types exist?
@Embeddable
@Getter
@Setter
@NoArgsConstructor
public class RelationshipType implements Serializable {

    @Id
    private Long id;

    @NotNull
    @JoinColumn(name="id")
    private Class1 class1;

    @NotNull
    @JoinColumn(name="code")
    private Class2 class2;


    private Integer anotherNumber;
}

共有1个答案

齐文栋
2023-03-14

它应该类似于下面的示例。您需要将与其他表的关系设置为ManyToOne,以获得所需的Employee和Number之间的关系。

@Entity
@Getter
@Setter
@Table(name = "employees_numbers")
public class EmployeeNumber {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "employee_id", nullable = false)
    private Employee employee;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "number_id", nullable = false)
    private Number number;

    @Column(name = "extra_column", nullable = false)
    private String extraColumn;
}

旁注:不要对整数使用NotEmpty。它是专为收藏而设计的。

旁注2:我在这里一瘸一拐地说,你想要的是将nullable=false添加到列中,而不是将它们标记为@NotNull。两者之间存在显着差异。

 类似资料:
  • 问题内容: 问题在标题中: 如何将多对多关系表作为实体? 问题答案: 我会说,你的问题很合理。看看这个文档部分:第24章最佳实践。摘录: 不要使用外来关联映射: 真正的多对多关联的实际测试案例很少见。大多数时候,您需要存储在“链接表”中的其他信息。在这种情况下,最好将两个一对多关联用于中间链接类。实际上,大多数关联是一对多和多对一的。因此,在使用任何其他关联样式时,您应谨慎进行。 我们正在处理的方

  • 我还想知道如何定义每个模型上的关系--你是否需要或者是否可以只在用户上定义关系?

  • 问题内容: 伙计们,我正在努力为我的公司制作一个简单的票证生成系统,以吸引人。目前,我的MSSQL数据库中有一个名为的表,另一个名为的表。 我的应用程序是C#Windows窗体,因此在新的票证生成窗体上,我有许多文本框和一个用于分配工程师的comboBox,由填充。生成票证后,以这种形式输入的所有信息都将与from一起存储。 效果很好,但是后来我的客户要求我添加选项,以便可以在一张票上分配3名工程

  • 问题内容: 我目前正在使用ActiveAndroid,并且在过去的几个小时里一直在尝试建立多对多关系,但是我还是无法正常工作。我希望你能帮助我: 我有“学生”和“课程”的模型,一个学生可以有很多课程,而一个课程有很多学生。基本上,这就是我在“ StudentCourse”模型中所拥有的: 现在,我要做的是使用以下代码获取“课程X中的所有学生”: 但是我收到以下错误: java.lang.Class

  • 在本章中,让我们了解和学习多对多的关系。要表示多对多关系,必须创建第三个表(通常称为联接表),将多对多关系分解为两个一对多关系。 为此,我们还需要添加一个联接表。 下面先添加一个表。表的定义如下所示 - 现在创建一个多对多的关系。假设有多个作者在多个项目上工作,反之亦然。 如您所知,我们在中有一个字段,所以为它创建了一个表。但现在不再需要这个字段了。 选择字段,然后按下删除 按钮,将看到以下消息。