如何使用具有多个值 JPA 的 mappedBy

How to use mappedBy with more than one value JPA

我有 2 个 table: 货币和汇率

汇率中的 inputCurrency 和 outputCurrency 外键引用货币的主键。

如何映射这些以便级联?

我试过 Rate(包含外键的 table)

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "INPUT_CURRENCY")
private Currency inputCurrency;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "OUTPUT_CURRENCY")
private Currency ouputCurrency;

但是,如果我从货币中删除一个项目,它会导致主键 violation.I 无法删除货币,因为它被 Rate 中的 inputCurrency 或 outputCurrency 引用。

如果我想用货币注释汇率列表,我怎么说 mappedBy = "inputCurrency" 和 "outputCurrency" ?

@OneToMany(cascade = CascadeType.ALL,mappedBy ="inputCurrency,outputCurrency")
List<Rate> rates;

您可以选择两个合集:

List<Rate> inputRate;

List<Rate> outputRate;

每个都有对应的mappedBy

和第三个@Transient List<Rate> rates;

您可以使用 @PostLoad 事件将两个持久列表合并为一个临时列表。

同样,当 adding/removing 个元素添加到持久列表之一时,请确保从联合列表中 add/remove。

解决方案是使用两个货币汇率列表:一个用于 fk inputCurrency 另一个用于 fk outputCurrency

@OneToMany(cascade = CascadeType.ALL,mappedBy ="inputCurrency")
List<Rate> ratesIC;

@OneToMany(cascade = CascadeType.ALL,mappedBy ="outputCurrency")
List<Rate> ratesOC;