@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
了。
最后更新于