2017-02-07 4 views
1

Die folgende Abbildung ist ein Fehler vonViele One Mapping in Hibernate

Ein Fremdschlüssel refering db.KarateInvoice von db.KarateInvoiceDetail geben hat die falsche Anzahl der Spalte. sollte 1

Rechnung Entity sein:

@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; 

Rechnung 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; 

Unternehmen Entity:

@Id 
private long  id; 

Idee ist mit einem Verbund einen Invoice Tisch haben, (id, fiscalyear und companyId) und InvoiceDetail mit einem zusammengesetzten Schlüssel von (seqNo, InvoiceId, InvoiceFiscalYear und InvoiceCompanyId).

+1

Welche Version von Hibernate verwenden Sie? Ich habe gerade das Mapping auf 5.2.7 getestet und sehe das nicht als problematisch an. – Naros

+0

Ich benutze Hibernate 5.1 – Cybermonk

Antwort

1

Ich denke, Sie explizit die Rechnungs Spalten auf den @JoinColumn Anmerkungen verweisen:

@ManyToOne 
@JoinColumns({ @JoinColumn(name = "karateInvoiceId" 
        , referencedColumnName="id"), 
     @JoinColumn(name = "karateInvoiceCompanyId" 
       , referencedColumnName="companyId"), 
     @JoinColumn(name = "karateInvoiceFiscalYear" 
       , referencedColumnName="fiscalYear") }) 
private KarateInvoice invoice; 
+0

Ich denke, das sollte funktionieren. Werde es testen und die Antwort akzeptieren, wenn es so ist. – Cybermonk

+0

Es hat nicht funktioniert:/ – Cybermonk

+0

ich mache später noch einige Tests. Ist der Fehler gleich? –