复合主键 table 未填充到相关实体中

Composite primary key table not populating in related entity

我的数据库包含一个带有复合主键的 table,其中一个键是外键,另一个应该用于从外部服务获取实体。代码看起来有点像这样:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Embeddable
@EqualsAndHashCode
public class PrimaryKey implements Serializable {
    @Column(name = "A_ID")
    private Long aId;

    @Column(name = "F_ID")
    private Long fId;
}


@Entity
@Table(name = "JOIN_ENTITY")
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class JoinEntity {
    @EmbeddedId
    private PrimaryKey pk;

    @MapsId("aId")
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "A_ID")
    private EntityA a;

    public getFId() { return pk.getFId(); }
}



@Entity
@Table(name = "ENTITY_A")
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class EntityA implements Serializable {
    ....

   @OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true)
   List<JoinEntity> list = new ArrayList<>();
}

当我保存一个 JoinEntity 并尝试从数据库中获取 EntityA 时,列表未被填充,但如果我从数据库中获取一些 JoinEntity,相关的 EntityA 将被正确恢复。我该怎么做才能使 JoinEntity 列表与 EntityA 一起恢复?

您需要在 EntityA 中的 @OneToMany 关联上使用 FetchType.EAGER class:

   @OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
   List<JoinEntity> list = new ArrayList<>();

这样当您从数据库中检索 EntityA 时,它的 JoinEntity 将被自动检索。

解决了使用 id 添加 ENTITY_F table 并切换到简单的 ManyToMany 关系的问题。