我有一个具有复合主键的@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()
吗?
前者更清楚,但缺点是我必须在MyPerson
和PersonId
创造吸气剂。
什么应该是首选的访问方式,为什么?
您不必创建属性
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);