Java 如何使用spring boot jpa在这两个类之间建立一对一的关系?另外,如何保存实体?

Java 如何使用spring boot jpa在这两个类之间建立一对一的关系?另外,如何保存实体?,java,mysql,spring,spring-boot,spring-data-jpa,Java,Mysql,Spring,Spring Boot,Spring Data Jpa,这是我的Alias record类,它与personal details类有一对一的关系: @Entity public class AliasRecord { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; private String policeId; private String enrollmentId;

这是我的Alias record类,它与personal details类有一对一的关系:

@Entity
public class AliasRecord
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    private String policeId;
    private String enrollmentId;
    @NotNull
    private boolean isVerified;

    @NotEmpty(message = "status not set")
    private String status;

   @OneToOne(cascade = CascadeType.ALL)
   @JoinColumn(name = "personalDetails", referencedColumnName = "id")
    private PersonalDetails personalDetails;


    public AliasRecord(String policeId, String enrollmentId, @NotNull boolean isVerified, @NotEmpty(message = "status not set") String status) {
        this.policeId = policeId;
        this.enrollmentId = enrollmentId;
        this.isVerified = isVerified;
        this.status = status;
    }

    public AliasRecord(String policeId, String enrollmentId, @NotNull boolean isVerified,
                       @NotEmpty(message = "status not set") String status, PersonalDetails personalDetails) {
        this.policeId = policeId;
        this.enrollmentId = enrollmentId;
        this.isVerified = isVerified;
        this.status = status;
        this.personalDetails = personalDetails;
    }

    public AliasRecord() {
   }

}
这是我的个人信息课程:

@Entity
public class PersonalDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    private String title;
    private String firstName;
    private String middleName;
    private String previousMiddleName;
    private String otherNames;
    private String surName;
    private String previousSurName;
    private String maidenName;
    private String email;
    private String phone;
    private String gender;
    private String dob;
    private String stateOfBirth;
    private String countryOfBirth;
    private String dobVerification;
    private String enrolmentType;
    private String photo;

    @OneToOne(mappedBy = "personalDetails")
    private AliasRecord record;


    public PersonalDetails() {
    }

    public PersonalDetails(String title, String firstName, String middleName, String previousMiddleName, String otherNames, String surName, String previousSurName, String maidenName, String email, String phone, String gender, String dob, String stateOfBirth, String countryOfBirth, String dobVerification, String enrolmentType, String nin, String photo, AliasRecord record) {
        this.title = title;
        this.firstName = firstName;
        this.middleName = middleName;
        this.previousMiddleName = previousMiddleName;
        this.otherNames = otherNames;
        this.surName = surName;
        this.previousSurName = previousSurName;
        this.maidenName = maidenName;
        this.email = email;
        this.phone = phone;
        this.gender = gender;
        this.dob = dob;
        this.stateOfBirth = stateOfBirth;
        this.countryOfBirth = countryOfBirth;
        this.dobVerification = dobVerification;
        this.enrolmentType = enrolmentType;
        this.nin = nin;
        this.photo = photo;
        this.record = record;
    }
}
这是我使用Crud存储库保存实体的方式:

AliasRecord record = new AliasRecord("12","1222",true,"status");
       AliasRecord aliasRecord = aliasRepository.save(record);
       PersonalDetails details = new PersonalDetails("d","","","","","",
                       "","","","","","","",
                       "","34","4444","","cccc",
                       aliasRecord);

       personalDetailsRepository.save(details);

我只是在构造函数中放入随机值,以查看代码是否正常工作。无论如何,当我尝试保存实体时,“personalDetails”列作为外键列出现在AliasRecord表中,但是它总是空的。我如何在这两个实体之间创建一对一的关系,以及如何将实体保存到MySQL数据库?

不要在OneToOne关系中使用双向映射。如果“PersonalDetails”依赖于“AliasRecord”,则将OneTONE映射添加到“PersonalDetails”实体。确定最重要的实体,并将OneTONE映射添加到该实体中。如果在两侧添加OneTONE映射,则无法保存,因为两者都期望FK值

在OneTONE关系中不使用双向映射。如果“PersonalDetails”依赖于“AliasRecord”,则将OneTONE映射添加到“PersonalDetails”实体。确定最重要的实体,并将OneTONE映射添加到该实体中。如果在两侧都添加一对一映射,则无法保存,因为两者都需要FK值。因此建议我只在alias record类中添加一对一映射,因为该类包含作为字段之一的personal details类。是的,如果AliasRecord是最重要的实体,则向该实体添加映射。感谢您的回复,但我只需要稍微澄清一下,hibernate是否为personal details类创建了一个表如果我只是用一对一的注释从alias record类中注释了它的字段,而且,我将使用的唯一对象是alias record,我不需要单独使用personal detail类,所以我要为personal details创建一个存储库,或者我可以从alias record类中获取要存储的个人详细信息吗?因此,我只需要一个alias record的存储库!。再次感谢“hibernate是否为personal details类创建了一个表”->如果“hibernate.ddl auto=update”,则是hibernate创建表。若您想要查询个人详细信息类,那个么您可以为此创建存储库,但您可以通过alias记录类查询个人详细信息类。我加上这个作为答案可以吗