![](/img/trans.png)
[英]Implementing Composite (Embedded-ID) Foreign Key Relations using Spring Data JPA
[英]Java Spring Data JPA Composite ID with foreign key
我正在制作 Spring web 服務以了解更多信息,我目前正在映射數據庫。 我有一個具有復合 ID 的表,其中一個 ID 是另一個表 (ManytoOne) 的外鍵。
債權人 | 債權人發票 |
---|---|
ID | 債權人編號 |
姓名 | 發票編號 |
就像你在任何地方買東西一樣,他們使用自己的方式制作 ID,它有一個像這樣的復合 ID。 我當前的代碼:Serializable class CInvoiceId:
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import java.io.Serializable;
import java.util.Objects;
@Embeddable
public class CInvoiceId implements Serializable {
@ManyToOne
@JoinColumn(name = "creditors_id", nullable = false)
private Creditor cInvoiceCreditorId;
@Column(name = "invoice_id", nullable = false)
private String cInvoiceId;
public CInvoiceId(Creditor creditor, String cInvoiceId){
this.cInvoiceCreditorId = creditor;
this.cInvoiceId = cInvoiceId;
}
//Setters, Getters, Equals and Hash
}
我的債權人 class
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name = "creditors")
public class Creditor {
@Id
@GeneratedValue
@Column(name = "id")
private int creditorId;
@Column(name = "name",nullable = false)
private String creditorName;
@OneToMany(mappedBy = "cInvoiceCreditorId")
private List<CInvoice> cInvoices;
}
我的 CInvoice class:
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
@Entity
@Table(name = "c_invoices")
public class CInvoice {
@EmbeddedId
private CInvoiceId cInvoiceID;
}
當我啟動它來嘗試測試它時,我收到錯誤消息,它無法找到來自債權人 class 的映射,但我不知道我應該將它 map 設置為什么,因為 ID 現在是在 CInvoiceId class 中生成的。什么應該嗎?
問候丹妮
您可以使用“派生身份”來 map 這些類:
債權人:
@Entity
@Table(name = "creditors")
public class Creditor {
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "name",nullable = false)
private String name;
@OneToMany(mappedBy = "creditor")
private List<CInvoice> invoices;
}
C發票編號:
@Embeddable
public class CInvoiceId implements Serializable {
@Column(name = "invoice_id", nullable = false)
private String invoiceID;
private int creditorID; // corresponds to PK type of Creditor
// ...
}
C發票:
@Entity
@Table(name = "c_invoices")
public class CInvoice {
@EmbeddedId
private CInvoiceId id;
@MapsId("creditorID") // maps creditorID attribute of embedded id
@ManyToOne
@JoinColumn(name = "creditors_id", nullable = false)
Creditor creditor;
}
派生身份在JPA 2.2 規范的第 2.4.1 節中討論(帶有示例)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.