Я пытаюсь смоделировать такую ситуацию - есть денежный перевод (я имею в виду автомобиль, который перевозит деньги), в котором требуются суммы каждой валюты, а также фактическая сумма для каждой валюты. И мне кажется бессмысленным создавать два отдельных класса, один для требуемой суммы, а другой для фактической суммы. Поэтому реализация будет выглядеть так:
@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
имеет свои собственные коллекции, поэтому его нельзя решить таким образом.
EDIT
Что касается запросов на полную историю - раньше в CashTransferCurrencyAmount
было два значения - обязательное (я думаю, что это «запрошенное») и фактическое, но теперь у каждой суммы есть своя коллекция - как эта сумма делится на деноминации. Поэтому мне нужна коллекция сумм, каждая из которых имеет коллекцию конфессий. Тип CurrencyAmount и CurencyDenomination, кажется, одинаков для запрошенных и для фактических.