我正在尝试决定使用哪个注释。你能提出自己的意见吗?
我现在拥有的:
@Entity
public class Balance {
@Embedded
private Amount amountAtm;
@Embedded
private Amount amountBranch;
@Embedded
private Amount amountVault;
}
@Embeddable
public Amount {
private BigDecimal debit;
private BigDecimal credit;
}
我想将其更改为:
@Entity
public class Balance {
@ElementCollection
private Map<AmountType, Amount> amounts;
}
public enum AmountType {
ATM, BRANCH, VAULT;
}
金额将保持不变。
这种变化的原因是因为余额中的金额在概念上是一个集合。我要么同时显示/更改所有这些,要么根本不显示/更改所有这些。所以,我把它们视为一个群体。
问题:
现在金额与余额存储在同一个表中(我覆盖列名,代码中没有显示)。但是,如果我进行此更改,则无法将所有这些数据存储在一个表中。我必须将金额存储在一个单独的表中。 这是正确的吗?
考虑到现在我将不得不在SQL等中创建JOIN。这将如何影响性能?假设我使用的是Oracle 11g并且我有100,000个余额记录(因此300,000金额)。我会注意到更改后应用程序的减速吗?
答案 0 :(得分:0)
我不明白为什么你对你的三个领域不满意。如果您希望在您的实体中拥有Map<AmountType, Amount> getAmounts()
方法(以及相应的setter),那么没有什么可以阻止您添加它并自行实现它:
public Map<AmountType, Amount> getAmounts() {
Map<AmountType, Amount> result = new HashMap<AmountType, Amount>(3);
result.put(AmountType.ATM, amountAtm);
result.put(AmountType.BRANCH, amountBranch);
result.put(AmountType.VAULT, amountVault);
return result;
}