java - 如何访问@EmbeddedId 的字段?

标签 java hibernate

我有一个具有复合主键的@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 中创建 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/

相关文章:

java - 无法使用Spring MVC打开WEB-INF子文件夹中的jsp

java - 在 LocationServices 和 MainActivity 之间通信

java - 具有集合的JPA实体针对分离成员上的contains方法返回false

java - Spring Data JPA/Hibernate - @Repository 中的 findByY(String y) 方法,其中 Y 可通过对象 X 访问

hibernate - 如何更改已弃用的 HibernateEntityManagerFactory(5.2.10) 以添加监听器?

mysql - 获取用户关注的个人资料的帖子

java - HIbernate在不同包中具有相同名称的两个实体但也不异常(exception)

java - Array 和 ArrayList 位置访问性能

java - 在 java 中创建一个计数计时器(仅秒和毫秒)

java - Java 8 foreach 函数中多于 1 个命令