Reputation: 524
The following mapping is giving an error of
A Foreign key refering db.KarateInvoice from db.KarateInvoiceDetail has the wrong number of column. should be 1
Invoice Entity:
@Id
@Column(name = "id")
private long id;
@OneToOne
@JoinColumn(name = "companyid")
@Id
private Company company;
@Id
private short fiscalYear;
@OneToMany(mappedBy = "karateInvoiceDetails")
private List<KarateInvoiceDetail> karateInvoiceDetails;
Invoice Detail:
@Id
private short seqNo;
@ManyToOne
@JoinColumns({ @JoinColumn(name = "karateInvoiceId"),
@JoinColumn(name = "karateInvoiceCompanyId"),
@JoinColumn(name = "karateInvoiceFiscalYear") })
private KarateInvoice invoice;
@Id
@OneToOne
@JoinColumns({ @JoinColumn(name = "studentId"),
@JoinColumn(name = "studentCompanyId") })
private KarateStudent student;
Company Entity:
@Id
private long id;
Idea is to have an Invoice
table with a composite of (id, fiscalyear, and companyId) and InvoiceDetail
with a composite key of (seqNo, InvoiceId, InvoiceFiscalYear, and InvoiceCompanyId).
Upvotes: 1
Views: 410
Reputation: 26492
I think you should explicitly reference the Invoice columns on the @JoinColumn annotations:
@ManyToOne
@JoinColumns({ @JoinColumn(name = "karateInvoiceId"
, referencedColumnName="id"),
@JoinColumn(name = "karateInvoiceCompanyId"
, referencedColumnName="companyId"),
@JoinColumn(name = "karateInvoiceFiscalYear"
, referencedColumnName="fiscalYear") })
private KarateInvoice invoice;
Upvotes: 1