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

时间:2016-05-03 09:49:47

标签: jpa jpa-2.1 mappedby

我有2张桌子: 货币和汇率

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

如何映射这些以便级联?

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

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

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

但是如果我从货币中删除一个项目它会导致主键违规。我无法删除一个货币因为它被inputCurrency或outputCurrency以Rate率引用。

如果我想在Currency中注释费率列表,我怎么能说mappedBy =“inputCurrency”和“outputCurrency”?

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

2 个答案:

答案 0 :(得分:1)

解决方案是使用Currency中的两个费率列表:一个用于fk inputCurrency 另一个用于fk outputCurrency

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

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

答案 1 :(得分:0)

你可以选择两个系列:

List<Rate> inputRate;

List<Rate> outputRate;

每个都有相应的mappedBy

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

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

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