[英]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.