为什么spring data jpa将一对关联映射到一对多



我有两个实体,Student和User。我使用JPA在它们之间创建一个一对一的关系,如下所示:


@Entity
@Table(name = "Student")
public class Student {
@Id
private Long id;
private String specialty;
private String level;
private String type;
private String institution;
@OneToOne
@MapsId
@JoinColumn(name = "id")
private User user;
}

@Entity
@Table(name = "User")
public class User {
@Id
private Long id;
private String firstName;
private String lastName;
private String gender;
private String birthDate;
private String adress;
private int phone;
private String username;
private String email;
private String password;
private String type;
@OneToOne(mappedBy = "user")
@PrimaryKeyJoinColumn
private Student student;

}

这确实创建了关系,但是当我去Mysql查看表时,关系是一对多,而不是一对。

我在Hibernate 6.2中完全尝试了您的代码,这是生成的DDL:

create table Student (
id bigint not null,
institution varchar(255),
level varchar(255),
specialty varchar(255),
type varchar(255),
primary key (id)
) engine=InnoDB
create table User (
id bigint not null,
adress varchar(255),
birthDate varchar(255),
email varchar(255),
firstName varchar(255),
gender varchar(255),
lastName varchar(255),
password varchar(255),
phone integer not null,
type varchar(255),
username varchar(255),
primary key (id)
) engine=InnoDB
alter table Student 
add constraint FKkfqq4nickg8wu56axc7jktv1 
foreign key (id) 
references User (id)

在我看来这是一个很好的一对一关联。

更新请注意,我将按照如下方式映射您的关联,假设每个Student都有一个User:

@Entity
@Table(name = "Student")
public static class Student {
@Id
private Long id;
@OneToOne(optional=false)
@MapsId 
@JoinColumn(name = "id")
private User user;
...
}
@Entity
@Table(name = "User")
public static class User {
@Id
private Long id;
@OneToOne(mappedBy = "user")
private Student student;
...
}

最新更新