嵌入式密钥的 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 实体映射的主要内容,如果未能解决你的问题,请参考以下文章

从一个视图映射具有嵌入式List的实体

JPA - 更新嵌入式实体会生成无效的 SQL

学习Spring-Data-Jpa---可嵌入对象和元素集合的使用

JPA:如果孩子有嵌入式ID,如何级联保存实体?

JPA Map映射

在 Hibernate / JPA 2.1 中延迟加载的 @OneToOne 映射不起作用?