簡體   English   中英

Java Spring 數據 JPA 帶外鍵的復合 ID

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

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