首页 > 解决方案 > 如何在 Java 中创建一个简单的连接表?

问题描述

我正在尝试用 Java 中的两个表建立一个非常简单的数据库,并使用特定的连接表连接它们。

第一个表学生由 id、first_name 和 last_name 组成。

第二个表课程由 id 和 name 组成。

名为 Enrollment 的连接表应具有源自第一个和第二个表的 course_id 和 student_id。

我的问题是我不知道在扩展 Spring Data JPA 的 AbstractPersistable 时如何映射 ID,其中有一个自动增量主键字段。

我的代码:

学生:

// Package
// Imports

@Entity
@Data @NoArgsConstructor @AllArgsConstructor
public class Student extends AbstractPersistable<Long> {

    private String first_name;
    private String last_name;

}

课程:

// Package
// Imports

@Entity
@Data @NoArgsConstructor @AllArgsConstructor
public class Course extends AbstractPersistable<Long> {

    private String name;

}

我尝试了 @ManyToMany 注释的不同用法,但由于主键 ID 由 AbstractPersistable 处理,我未能映射连接表的“不可见”ID。

我也知道连接表及其列可以用@Column、@JoinColumn 和@JoinTable 命名。我还没有走到那一步。

标签: javaspringh2lombok

解决方案


嗨,我会尝试这样的事情......

@Entity
@Data @NoArgsConstructor @AllArgsConstructor
public class Student extends AbstractPersistable<Long> {

    private String first_name;
    private String last_name;

     @ManyToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    })
    @JoinTable(name = "enrollment",
        joinColumns = @JoinColumn(name = "student_id"),
        inverseJoinColumns = @JoinColumn(name = "course_id")
    )
     private List<Course> courses;

}
@Entity
@Data @NoArgsConstructor @AllArgsConstructor
public class Course extends AbstractPersistable<Long> {

    private String name;

    @ManyToMany(mappedBy = "courses")
    private List<Student> students;

}

推荐阅读