我正在使用 Hibernate 3.2.5 创建一个 Java 应用程序。我在 Netbeans 7.2 中开发,数据库是 MySQL 5.5。其基本理念是美式橄榄球比赛。
我目前的问题在于Play类的设计:我想将 aPlay与 a链接PlayerAction,但在任何给定的 上Play,只能接受的某些子类PlayerAction。有几种类型的约束:
- 需求约束(“这个
Play子类必须有这个PlayerAction”) - 可能性约束(“这个
Play子类可以有这个PlayerAction”) - 排除约束(“这个
Play子类不能同时具有PlayerActionA 和 B”)
代码:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Play implements Countable, Serializable, Locatable {
@OneToMany(cascade=CascadeType.ALL, mappedBy="play")
private List<PlayerAction> actions;
}
例如,我的班级PassingPlay只能允许PlayerActions以下类型:
PassActionReceptionActionSackActionInterceptionActionSackAction排除ReceptionAction
RunningPlay只能允许PlayerActions以下类型:
- 必需的
RunAction TackleActionFumbleAction
等等
只要易于维护,理想的解决方案不必易于构建。我目前唯一的想法是给每个子类一个返回 String[][] 的方法,但这太蹩脚、笨重且非 OO——我什至不想开始实现它。