繁体   English   中英

Hibernate 中的多对一映射

[英]Many to One Mapping in Hibernate

以下映射给出了错误

从 db.KarateInvoiceDetail 引用 db.KarateInvoice 的外键列数错误。 应该是 1

发票实体:

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

发票明细:

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

公司实体:

@Id
private long        id;

想法是拥有一个包含(id、财政年度和公司 ID)和InvoiceDetail的组合的Invoice表,其组合键为(seqNo、InvoiceId、InvoiceFiscalYear 和 InvoiceCompanyId)。

我认为您应该明确引用 @JoinColumn 注释上的 Invoice 列:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM