java - 如何在 Hibernate 中将 @OneToOne 关系映射到静态表

标签 java hibernate jpa

我有一个包含两列的静态表:statusCode、statusName。该表仅包含 7 条记录。以及一个与状态具有一对一关系的表候选

它看起来或多或少像这样:

@Entity
public class Status {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    String statusName;
    String statusCode;

    // getters and setters
}

还有

@Entity
public class Candidate {
    // properties, getters and setters
    @OneToOne
    Status status;
}

问题是,每次我创建一个新的 Candidate 时,我还需要在我的 Status 表中创建一条新记录,这样我将存储大量冗余数据(只有 7 种可能的数据)状态)。 我只想在 Candidate 实体中设置状态 ID,以便稍后能够接收状态详细信息,从而避免在 Status 表中创建不必要的记录。

谢谢

最佳答案

首先你应该将 OneToOne 更改为 ManyToOne

@Entity
public class Candidate{
    // properties, getters and setters

    @ManyToOne
    Status status;
}

创建新候选人时必须获取状态并分配它。

无论是

Status status = em.find(Status.class, id);

这将加载整个状态,或者如果您只想设置外键并且不需要状态对象

Status status = em.getReference(Status.class, id);

然后您可以将检索到的状态分配给候选人。

em 是 EntityManager

关于java - 如何在 Hibernate 中将 @OneToOne 关系映射到静态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928847/

相关文章:

java - FTPClient上传进度

java - Maven 替代品?

Java Order by 具有不同子对象类型的一对多关系

java - 使用 HibernateTemplate 和 IN 子句进行批量更新

java - JPA 验证策略

java - 我如何创建一个将使用特定类路径的类加载器?

java - 是否可以指示hibernate在执行插入时不要设置空值?

java - Hibernate 进行 N+1 查询以初始化父类(super class)中的惰性集合

java - 无法使用 Spring Boot 2 和 Tomcat 8.5.38(非嵌入式 Tomcat)获得 JNDI 连接

java - 验证是否调用了列表元素方法