0

我有 2 张表:货币和汇率

货币的主键由 Rate 中的 inputCurrency 和 outputCurrency 外键引用。

我如何将这些映射到 cascadeALL?

我试过 Rate (包含前键的表)

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

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

但是,如果我从货币中删除一个项目,则会导致主键违规。我无法删除货币,因为它被输入货币或输出货币的汇率引用。

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

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

2 回答 2

1

您可以使用两个系列来解决:

List<Rate> inputRate;

List<Rate> outputRate;

每一个都有对应的mappedBy

第三个@Transient List<Rate> rates;

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

同样,在向其中一个持久列表添加/删除元素时,请确保从联合列表中添加/删除。

于 2016-05-03T09:58:29.657 回答
1

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

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

@OneToMany(cascade = CascadeType.ALL,mappedBy ="outputCurrency")
List<Rate> ratesOC;
于 2016-05-03T10:02:23.007 回答