@OneToMany (unidirectional)
还是 university 和 student 这两张表:
university
student
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。 学生类只有 id 和 name字段。
我们来看一下 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 代码 student 和 university 实体类里。现在,如果用 repository 获取一个 University 实体,那么会有 List<Student> students 域。但是如果获取 Student 实体,就只有 id 和 name 了。
最后更新于
