Как я могу установить отношения один к одному между этими двумя классами, используя Spring Boot JPA? Кроме того, как я могу сохранить сущности? - PullRequest
0 голосов
/ 24 января 2019

Это мой класс записи псевдонимов, он имеет отношение один к одному с классом личных данных:

@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?.

1 Ответ

0 голосов
/ 24 января 2019

Не используйте двунаправленное отображение в отношениях OneToOne.Если «PersonalDetails» зависит от «AliasRecord», добавьте сопоставление OneToOne в сущность «PersonalDetails».Определите наиболее значимый объект и добавьте сопоставление OneToOne в этот объект.Если вы добавляете сопоставление OneToOne в обе стороны, вы не сможете сохранить, потому что оба ожидают значения FK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...