仅允许Java Hibernate实体关系中的某些子类

时间:2013-03-04 11:39:59

标签: java hibernate design-patterns subclass

我正在使用Hibernate 3.2.5创建一个Java应用程序。我正在使用Netbeans 7.2开发,数据库是MySQL 5.5。基本思想是美式橄榄球比赛。

我目前的问题在于Play类的设计:我想将PlayPlayerAction相关联,但在任何给定的Play上,只有某些子类可以接受PlayerAction。有几种类型的约束:

  • 需求约束(“此Play子类必须具有此PlayerAction”)
  • 可能性约束(“此Play子类可以具有此PlayerAction”)
  • 排除约束(“此Play子类不能同时具有PlayerAction A和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种类型:

  • PassAction
  • ReceptionAction
  • SackAction
  • InterceptionAction
  • SackAction不包括ReceptionAction

RunningPlay只允许PlayerActions种类型:

  • 必需RunAction
  • TackleAction
  • FumbleAction

只要易于维护,理想的解决方案就不一定非常容易构建。我目前唯一的想法就是给每个子类一个返回String [] []的方法,但这太蹩脚,笨重,而且非OO - 我甚至不想开始实现它。

0 个答案:

没有答案