嵌入式密钥的 JPA 实体映射

Posted

技术标签:

【中文标题】嵌入式密钥的 JPA 实体映射【英文标题】:JPA entity mapping for embedded key 【发布时间】:2021-05-10 10:29:33 【问题描述】:

我在 Spring Boot 应用程序中定义了几个 JPA 实体。

@Entity
public class EntityA 
    @Id
    @Column(name = "id")
    private String id
    // ...
    //....other fields

@Entity
public class EntityB 
   @EmbeddedId
   private MyEmbeddedId id;
   // ....other fields

public class MyEmbeddedId 
   @Column(name = "id_a")
   private String idA;
    
   @Column(name = "color")
   private String color;

EntityA 是自给自足的,EntityB 有一个复合键,其组成部分是EntityA 的主键(由列id_a 表示)。所以我在这里使用嵌入式密钥功能。 EntityAEntityB 之间存在一对多关系。 EntityA 的一个实例可以映射到EntityB 的多个实例。

现在,我的目标是获取 EntityA 及其所有关联的 EntityB

如何进行映射?

【问题讨论】:

【参考方案1】:

试试下面的实体映射,

@Entity
public class EntityA 
    @Id
    @Column(name = "id")
    private String id

    @OneToMany(mappedBy = "myEmbeddedId.idA",
    cascade = CascadeType.ALL)
    private Set<EntityB> entityB;

    // ...
    //....other fields


@Entity
public class EntityB 
   @EmbeddedId
   private MyEmbeddedId myEmbeddedId;
   // ....other fields


public class MyEmbeddedId 
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="id_a")
   private EntityA idA;

   @Column(name = "color")
   private String color;

当你加载EntityA时,它会加载所有关联的EntityB。

【讨论】:

@Mandroid 配置试过了吗?

以上是关于嵌入式密钥的 JPA 实体映射的主要内容,如果未能解决你的问题,请参考以下文章