首页 > 解决方案 > 如何在 Spring Boot 中创建实体以使 id 保持不变

问题描述

在我的Spring Boot应用程序中,假设我有一个名为A

@Entity
public class A{
    @Id
    Long id;
    A(){}       
}

另一个名为B

@Entity
public class B{
    @Id
    Long id;
    A a;
    B(){}       
}

我想要的是 -每当我创建 B 的实例时,都会使用相同的 id 创建 A

我该怎么做 ?

就像在 JSON 中一样,B 的一个实例:

{
   "id": "x",
   "a": {
      "id": "x"
   }
}

我得到什么:

{
   "id": "x",
   "a": {
      "id": "y"
   }
}

标签: springspring-bootjpaspring-data-jpa

解决方案


它可以通过使用 Hibernate 的@MapsId注解来实现。这里有一篇好文章。我将在下面提供一个简化的示例:

一类:

@Entity
public class A {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToOne(mappedBy = "a", cascade = CascadeType.ALL)
    private B b;

    ...

}

B类:

@Entity
public class B {
    @Id
    private Integer id;

    @OneToOne
    @JoinColumn
    @MapsId
    private A a;

    ...

}

在此示例中,主键B.id嵌入自A.id.


推荐阅读