【发布时间】:2009-12-07 08:14:28
【问题描述】:
我正在尝试模拟这种情况 - 有一个现金转移(我的意思是一辆载钱的汽车),它需要每种货币的金额,以及每种货币的实际金额。在我看来,创建两个单独的类是没有意义的,一个用于所需数量,另一个用于实际数量。所以实现看起来像这样:
@Entity
public class CashTransferCurrencyAmount {
// id, version and so on
@Column(length = 3)
private String currencyCode;
@Basic
private BigDecimal amount;
@ManyToOne
private CashTransfer cashTransfer;
}
@Entity
public class CashTransfer {
// id, version and so on
@OneToMany(mappedBy="cashTransfer")
private Set<CashTransferCurrencyAmount> requiredCurrencyAmountSet = new HashSet<CashTransferAmountCurrency>();
@OneToMany(mappedBy="cashTransfer")
private Set<CashTransferCurrencyAmount> actualCurrencyAmountSet = new HashSet<CashTransferAmountCurrency>();
}
但是 CashTransferCurrencyAmount 实例如何知道它属于哪个集合?我有两个想法:
1 - 向 CashTransferCurrencyAmount 添加一个鉴别器字段:
public enum RequestType {
ACTUAL,
REQUIRED
}
@Basic
@Enumerated(EnumType.STRING)
private RequestType requestType;
并将@WHERE 注释添加到CashTransfer 中的集合。这对我来说更可取。
2 - 创建两个连接表。一种用于映射请求的金额,另一种用于映射实际金额。我不喜欢这个,因为我不想在我的数据库中有太多的表。
还有其他方法可以实现吗?我这个方法对吗?
请不要告诉我将请求的金额和实际金额都放在一个实体中。实际情况更复杂,每个CashTransferCurrencyAmount 都有自己的集合,所以不能这样解决。
编辑
至于完整故事的请求 - CashTransferCurrencyAmount 中曾经有两个值 - 必需(我认为它应该是“请求的”)和实际值,但现在每个金额都有自己的集合 - 这个金额如何分成面额。所以我需要一个数量的集合,每个数量都有一个面额的集合。 CurrencyAmount 和 CurencyDenomination 的类型似乎与请求的类型和实际的类型相同。
【问题讨论】:
-
您是说实际和请求的货币数量在您的实际模型中属于不同类型吗?如果是这样,他们是否不需要单独的表格?你没有给我们完整的故事,所以我发现很难就一个好的模型给你建议。
标签: java hibernate collections mapping