我有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;
答案 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
事件将两个持久列表合并为瞬态列表。
同样,在向其中一个持久性列表添加/删除元素时,请务必在联合列表中添加/删除。