@OneToMany (unidirectional)

还是 universitystudent 这两张表:

universitystudent

id name

id name university_id

@Entity
@Table(name = "university")
public class University {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "university_id")
    private List<Student> students;

    /* Getters and setters */
}
@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    /* Getters and setters */
}

@OneToMany 单向关系中,@JoinColumn 注释指向多方(Many)(在我们的示例中为学生)的表。 因此,在上面的代码中,我们看到了大学类中的 @JoinColumn。 学生类只有 idname字段。

我们来看一下 JPA 自动建表的结果:

student 表:

+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| id            | bigint       | NO   | PRI | NULL    |       |
| name          | varchar(255) | YES  |     | NULL    |       |
| university_id | bigint       | YES  | MUL | NULL    |       |
+---------------+--------------+------+-----+---------+-------+

university 表:

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | bigint       | NO   | PRI | NULL    |       |
| name  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

我们发现,还是正常的 student 拥有一个 university_id 外键,所以双向和单向关系有什么区别呢

答案在 Java 代码 studentuniversity 实体类里。现在,如果用 repository 获取一个 University 实体,那么会有 List<Student> students 域。但是如果获取 Student 实体,就只有 idname 了。

最后更新于