多个实体一对多连接
Multiple entity one to many joins
我有一个实体,我需要 link 给它多个子实体,我的例子是:
我有 Invoice Header 实体,我想 link 使用 @OneToMany
多个实体,Invoice Adjustment 和 Prior Notice Entity 。
所以发票抬头可以有一个或多个Invoice Adjustment和一个或多个Prior Notice。
我可以 link 到一个实体,但不确定如何才能 link 到另一个实体,因为我正在尝试不同的选择但没有工作,
例如下面是我的代码和错误。
public class InvoiceHeader extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Size(max = 1)
private String recordId;
@Size(max = 1)
private String action;
@OneToMany(mappedBy = "invoiceHeader", cascade =
CascadeType.ALL,orphanRemoval = true)
private List<InvoiceAdjustment> invoiceAdjustments = new ArrayList<>();
@OneToMany(mappedBy = "priorNotice", cascade =
CascadeType.ALL,orphanRemoval = true)
private List<PriorNoticeFoodAndDrugAdmin> priorNoticeFoodAndDrugAdmins = new ArrayList<>();
}
public class InvoiceAdjustment extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String recordId;
private String reserved;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "invoiceHeader_id")
private InvoiceHeader invoiceHeader;
}
public class PriorNoticeFoodAndDrugAdmin extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String recordId;
private String reserved;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "priorNotice_id")
private InvoiceHeader invoiceHeader;
}
这是我遇到的错误:
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.invoiceconverter.invoiceconverter.model.PriorNoticeFoodAndDrugAdmin.priorNotice in com.invoiceconverter.invoiceconverter.model.InvoiceHeader.priorNoticeFoodAndDrugAdmins
public class InvoiceHeader extends InvoiceProcessing{
...
@OneToMany(mappedBy = "invoiceHeader", ... )
private List<InvoiceAdjustment> invoiceAdjustments = new ArrayList<>();
@OneToMany(mappedBy = "invoiceHeader", ...)
private List<PriorNoticeFoodAndDrugAdmin> priorNoticeFoodAndDrugAdmins = new ArrayList<>();
}
mappedBy
命名关联实体上的属性,它定义了该关联的外键。在这两种情况下都是名为 "invoiceHeader".
的属性
此外,对于 PriorNoticeFoodAndDrugAdmin#invoiceHeader
的 FK 列,您可能并不意味着 "priorNotice_id" - 我认为您也会将该列命名为 "invoiceHeader_id"
我有一个实体,我需要 link 给它多个子实体,我的例子是:
我有 Invoice Header 实体,我想 link 使用 @OneToMany
多个实体,Invoice Adjustment 和 Prior Notice Entity 。
所以发票抬头可以有一个或多个Invoice Adjustment和一个或多个Prior Notice。
我可以 link 到一个实体,但不确定如何才能 link 到另一个实体,因为我正在尝试不同的选择但没有工作,
例如下面是我的代码和错误。
public class InvoiceHeader extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Size(max = 1)
private String recordId;
@Size(max = 1)
private String action;
@OneToMany(mappedBy = "invoiceHeader", cascade =
CascadeType.ALL,orphanRemoval = true)
private List<InvoiceAdjustment> invoiceAdjustments = new ArrayList<>();
@OneToMany(mappedBy = "priorNotice", cascade =
CascadeType.ALL,orphanRemoval = true)
private List<PriorNoticeFoodAndDrugAdmin> priorNoticeFoodAndDrugAdmins = new ArrayList<>();
}
public class InvoiceAdjustment extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String recordId;
private String reserved;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "invoiceHeader_id")
private InvoiceHeader invoiceHeader;
}
public class PriorNoticeFoodAndDrugAdmin extends InvoiceProcessing{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String recordId;
private String reserved;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "priorNotice_id")
private InvoiceHeader invoiceHeader;
}
这是我遇到的错误:
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.invoiceconverter.invoiceconverter.model.PriorNoticeFoodAndDrugAdmin.priorNotice in com.invoiceconverter.invoiceconverter.model.InvoiceHeader.priorNoticeFoodAndDrugAdmins
public class InvoiceHeader extends InvoiceProcessing{
...
@OneToMany(mappedBy = "invoiceHeader", ... )
private List<InvoiceAdjustment> invoiceAdjustments = new ArrayList<>();
@OneToMany(mappedBy = "invoiceHeader", ...)
private List<PriorNoticeFoodAndDrugAdmin> priorNoticeFoodAndDrugAdmins = new ArrayList<>();
}
mappedBy
命名关联实体上的属性,它定义了该关联的外键。在这两种情况下都是名为 "invoiceHeader".
此外,对于 PriorNoticeFoodAndDrugAdmin#invoiceHeader
的 FK 列,您可能并不意味着 "priorNotice_id" - 我认为您也会将该列命名为 "invoiceHeader_id"