我有两个实体,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;
...
}