簡體   English   中英

JPA @ManyToOne 加入復合主鍵的一部分

[英]JPA @ManyToOne joining on part of composite primary key

我有兩個要加入的表。 讓我們說TableA和TableB。

表A

@Entity
@Table(name = "TableA")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TableA {

    @Id
    @EmbeddedId
    private TableA.PrimaryId id = new TableA.PrimaryId();

    @Column(name = "COL1")
    private Integer col1;   
   
    @ManyToOne
    @JoinColumn(name = "ID1")

    private TableB tableB;

    @Data
    @Embeddable
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class PrimaryId implements Serializable {
        @Column(name = "ID1")
        private Integer id1;

        @Column(name = "ID2")
        private Integer id2;
    }
}

表B

@Entity
@Table(name = "TableB")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TableB {
    @Id
    @EmbeddedId
    private PrimaryId id = new PrimaryId();

    @Column(name = "COLUMN1")
    private String column1;

    @Data
    @Embeddable
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class PrimaryId implements Serializable {
        @Column(name = "ID1")
        private Integer id1;

        @Column(name = "KEY2")
        private Integer key2;

        @Column(name = "KEY3")
        private Integer key3;

        @Column(name = "KEY4")
        private Long key4;
    }
}

問題是 TableB 具有復合主鍵(4 列) ,但我只需要在 1 列 (ID1) 上進行連接。 它不是標准連接,它是部分主鍵連接。

所以它會導致錯誤:

nested exception is org.hibernate.AnnotationException: A Foreign key refering TableB from TableA has the wrong number of column. should be 4

如果我試試這個

@ManyToOne
@JoinColumn(name = "ID1", referencedColumnName = "ID1", updatable=false, insertable=false)

我收到另一個錯誤

nested exception is org.hibernate.AnnotationException: referencedColumnNames(ID1) of TableA.TableB referencing TableB not mapped to a single property

我在類似的帖子中尋找答案,但沒有發現任何有用的東西:(

所以我很感激任何幫助......

如果我有什么問題,請糾正我,但可能有多個TableB實體具有相同的“ID1”值,所以 toOne-relation 不適合這里,對吧?

我想檢索所有“相關” TableB實體列表的一種簡單方法是分別查詢特定的“ID1”,例如通過tableBRpository.findByIdId1(tableA.id.id1)

暫無
暫無

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

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