我有一个@Entity
,它有一个复合主键。因此,我创建了一个@EmbeddedId
来保存PK字段。
问题:直接通过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
中创建吸气剂。
访问的首选方式是什么?为什么?
答案 0 :(得分: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);