Java Hibernate中的多对一映射
以下映射给出的错误为 从db.KarateInvoiceDetail引用db.KarateInvoice的外键 列的编号错误。应该是1 发票实体:Java Hibernate中的多对一映射,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,以下映射给出的错误为 从db.KarateInvoiceDetail引用db.KarateInvoice的外键 列的编号错误。应该是1 发票实体: @Id @Column(name = "id") private long id; @OneToOne @JoinColumn(name = "companyid") @Id private Company company; @Id private short
@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 long id;
想法是让一个
Invoice
表具有(id、fiscalyear和companyId)的组合和InvoiceDetail
的组合键(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;
您使用的是什么版本的Hibernate?我刚刚在5.2.7上测试了映射,我不认为这有问题。我使用的是hibernate 5.1,我认为这应该可以工作。我将对它进行测试,如果答案是肯定的,我会接受的。错误是一样的吗?一件至关重要的事情。。请为有问题的表添加DDL语句。。这可能会给我们提供一些线索。这里说我应该使用IdClass或嵌入式id。我也会尝试。。
@ManyToOne
@JoinColumns({ @JoinColumn(name = "karateInvoiceId"
, referencedColumnName="id"),
@JoinColumn(name = "karateInvoiceCompanyId"
, referencedColumnName="companyId"),
@JoinColumn(name = "karateInvoiceFiscalYear"
, referencedColumnName="fiscalYear") })
private KarateInvoice invoice;