简体   繁体   English

如何从外部 id 获取主键以作为外键引用?

[英]How to get the primary key from an external id to reference as foreign key?

So I have a family entity class like this:所以我有一个像这样的家庭实体 class :

@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();
    }
}

Where I will be getting only family name from FamilyDTO and will be generating the id for internal purposes and for database PK and an externalID to give back to the client.我将只从FamilyDTO获取姓氏,并将生成用于内部目的的id以及用于数据库 PK 和externalID以回馈给客户。

Now I have a person class:现在我有一个人class:

@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;
    }
}

I will be taking name and familyExternalID from PersonDTO :我将从PersonDTO获取namefamilyExternalID

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

Now the thing is I have to use family id as the foreign key and not the familyexternalID (in the person table), So how to map familyExternalID to family id in the family table and then add family id as the foreign key?现在问题是我必须使用family id作为外键而不是familyexternalID(在person表中),那么如何将map familyExternalID添加到family 表中的family id然后添加family id作为外键?

It seems you should create a relationship between Family and Person entities:看来您应该在 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;
    }
}

As for PersonDTO, you'd be able to use family externalID when you build the DTO:至于 PersonDTO,您可以在构建 DTO 时使用家庭 externalID:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM