我有 2 个实体 User 和 Doctor,正如你可能猜到的,我的想法是在它们之间建立 OneToOne 关系,我的步骤是首先创建一个 User,然后在激活 User 后,创建一个 Doctor 作为主键,激活用户的外键。
我正在寻找创建一个不包含进程中的对象用户的医生,因为用户已经创建了。
代码如下:
@Entity
@Data
public class User {
@Id
private String id;
@Column(unique=true)
private String email;
private String phone;
private String password;
@Enumerated(EnumType.STRING)
private Authorities authority;
private boolean active;
private String activationKey;
}
@Entity
@Data
public class Doctor {
@Id
private String id;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private User user;
private String name;
private String address;
}
然后,创建一个用户
{
"id": "3",
"email": "[email protected]",
"phone": "phone",
"password": "password",
"authority": "DOCTOR"
}
激活后,尝试创建一个Doctor
{
"id": "3",
"name": "Third User",
"address": "address",
"newPassword": "newPassword"
}
但是,导致错误
"org.springframework.orm.jpa.JpaSystemException: attempted to assign id from null one-to-one property [com.example.demo.domain.Doctor.user]
我一直在尝试更改 OneToOne 的加载类型,并在保存时将用户设置为 null,但仍然不起作用。
首先为用户属性添加@JoinColumn(name = "user_id"),然后不要尝试直接设置Doctor的ID,而是先检索User实体,然后将其设置在Doctor对象中,然后保存。