如何访问@EmbeddedId的字段?

问题描述 投票:1回答:1

我有一个具有复合主键的@Entity。因此,我创建了一个持有PK字段的@EmbeddedId

问题:是否更好地直接通过id.*访问这些字段,还是应该在父类中创建getter / setter?

例:

@Entity
public class MyPerson {
    @EmbeddedId
    private PersonId id;

    public String getFirstname() {
        return id.getFirstname();   
    }

    public String getLastname() {
        return id.getLastname();
    }

    public LocalDate getDob() {
        return id.getDob();
    }   
}

@Embeddable
public class PersonId implements Serializable {
    private String firstname;
    private String lastname;
    private LocalDate dob;

    //getter+setter as well
}

我应该更好地使用person.getFistname()person.getId().getFirstname()吗?

前者更清楚,但缺点是我必须在MyPersonPersonId创造吸气剂。

什么应该是首选的访问方式,为什么?

java hibernate
1个回答
3
投票

您不必创建属性

private PersonId id

替代方案是

@Entity  @IdClass(PersonId.class)
public class MyPerson {
    @Id private String firstname;
    @Id private String lastname;
    @Id private LocalDate dob;

    // Getters and setters here    
}

并使用PersonId仅用于加载MyPerson实体:

PersonId peronId = new PersonId(firstname, lastname, dob);
MyPerson person = session.get(MyPerson.class, personId);
© www.soinside.com 2019 - 2024. All rights reserved.