我有一个具有复合主键的@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
中创建 getter。
首选的访问方式应该是什么,为什么?
最佳答案
您不必创建属性
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);
关于java - 如何访问@EmbeddedId 的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48075807/