如何使用具有多个值 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;
我有 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;