簡體   English   中英

復合主鍵表未填充到相關實體中

[英]Composite primary key table not populating in related entity

我的數據庫包含一個帶有復合主鍵的表,其中一個鍵是外鍵,另一個應該用於從外部服務獲取實體。 代碼看起來有點像這樣:

@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 就會正確恢復。 我該怎么做才能使用 EntityA 恢復 JoinEntity 列表?

您需要在 EntityA 類中的 @OneToMany 關聯上使用 FetchType.EAGER:

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

這樣,當您從數據庫中檢索EntityA 時,將自動檢索其JoinEntity s。

解決了添加帶有 id 的 ENTITY_F 表並切換到簡單的多對多關系的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM