У меня общий вопрос о дизайне ОО, связанный с Hibernate Model.
Пример
оплата - База (SuperType)
@Entity
@Table(name = "PAYMENT")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name = "type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("BASE")
public class Payment{
private Product product;
private Date date;
private Customer Customer;
getters/setters
}
CreditCard
@Entity
@DiscriminatorValue("CC")
public class CreditCard extends Payment {
private String Account
getters/setters
}
Наличный
@DiscriminatorValue("CASH")
public class Cash extends Payment {
private String Paper
private String Coins
getters/setters
}
Работа с Hibernate не является проблемой (таблица для иерархии классов). Поскольку Hibernate может принимать общий экземпляр Object и при этом сохранять правильный экземпляр.
Мой вопрос касается полиморфной работы с Платежем в других частях кода. Так как каждый подкласс добавляет уникальные поля экземпляра, это означает, что мне нужно заглушить эти поля подкласса в самом Платеже только для того, чтобы купить преимущество полиморфизма. Это не кажется правильным, так как каждый раз, когда я добавляю новое поле в подкласс или новый тип платежа, я возвращаюсь и добавляю методы к Платеже.
Есть ли что-то, чего мне не хватает, шаблон или что-то присущее Java, которое я могу использовать?
Спасибо
-J