java - Hibernate 中的多对一映射

标签 java hibernate jpa orm

以下映射给出的错误为

A Foreign key refering db.KarateInvoice from db.KarateInvoiceDetail has the wrong number of column. should be 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;

想法是拥有一个Invoice表,其中包含(id、fiscalyear和companyId)和InvoiceDetail的组合,其组合键为(seqNo、InvoiceId、InvoiceFiscalYear、和 InvoiceCompanyId)。

最佳答案

我认为您应该在 @JoinColumn 注释上显式引用发票列:

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

关于java - Hibernate 中的多对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42081106/

相关文章:

Java 或 Groovy CMS

java - 摆脱 JPA 中对所有者的冗余引用

java - 将单选按钮添加到上下文菜单

java - 扩展实体类的非实体类

java - JPA 1 个关系表,2 个独立子句,使用带有 @OneToMany 的公共(public)类

java - Hibernate @Formula 减法和加法

sql - Spring JPA : No converter data from DB in to DTO

java - JTA(Bitronix)/JPA/Hibernate - 如何从 Entitymanager 获取 XAResource?

java - 设置 weblogic 应用程序的系统属性

java - 基于 gradle.settings 的 Gradle sourceSets