Как получить первичный ключ от внешнего идентификатора для ссылки в качестве внешнего ключа? - PullRequest
0 голосов
/ 20 апреля 2020

Итак, у меня есть класс сущности семейства, подобный этому:

@Entity
public class Family {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    @Column(name = "familyName")
    private String familyName;
    @Column(name = "externalID")
    private String externalID;

    public Family(String familyName) {
        this.familyName = familyName;
        this.externalID = UUID.randomUUID().toString();
    }
}

Где я буду получать только фамилию из FamilyDTO и буду генерировать id для внутренних целей и для базы данных PK и externalID, чтобы вернуть клиенту.

Теперь у меня есть личный класс:

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

    private Integer familyID;    // should be a foreign key to the family primary key id

    public Project(String name) {
        this.name = name;
    }
}

Я буду принимать name и familyExternalID с PersonDTO:

public class PersonDTO {
    private String name;
    private Integer familyExternalID;
}

Теперь мне нужно использовать идентификатор семьи в качестве внешнего ключа, а не familyexternalID (в таблице персон), так как сопоставить familyExternalID с идентификатором семьи в таблице семейства, а затем добавить идентификатор семьи как внешний ключ?

1 Ответ

1 голос
/ 20 апреля 2020

Похоже, вам следует создать отношения между сущностями Family и Person:

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

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "familyID")
    private Family family;

    public Person(String name) {
        this.name = name;
    }
    // getters/setters...

    public String getFamilyExternalID() {
        if (null != this.family) {
            return this.family.getExternalID();
        }
        return null;
    }
}

Что касается PersonDTO, вы сможете использовать семейство externalID при создании DTO:

PersonDTO personDTO = new PersonDTO();
personDTO.setName(person.getName());
personDTO.setFamilyExternalID(person.getFamilyExternalID());

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