在Java Hibernate实体关系中只允许某些子类

在Java Hibernate实体关系中只允许某些子类,java,hibernate,design-patterns,subclass,Java,Hibernate,Design Patterns,Subclass,我正在用Hibernate 3.2.5创建一个Java应用程序。我正在开发Netbeans 7.2,数据库是MySQL 5.5。基本理念是美式足球比赛 我当前的问题是Play类的设计:我想将Play与PlayerAction链接,但在任何给定的Play上,只能接受PlayerAction的某些子类。有几种类型的约束: 需求约束(“此Play子类必须具有此PlayerAction”) 可能性约束(“thisPlay子类可以有thisPlayerAction”) 排除约束(“此Play子类不能同时

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

我当前的问题是
Play
类的设计:我想将
Play
PlayerAction
链接,但在任何给定的
Play
上,只能接受
PlayerAction
的某些子类。有几种类型的约束:

  • 需求约束(“此
    Play
    子类必须具有此
    PlayerAction
    ”)
  • 可能性约束(“this
    Play
    子类可以有this
    PlayerAction
    ”)
  • 排除约束(“此
    Play
    子类不能同时具有
    PlayerAction
    A和B”)
代码:

@实体
@继承(策略=InheritanceType.JOINED)
公共抽象类Play实现了可数、可序列化、可定位{
@OneToMany(cascade=CascadeType.ALL,mappedBy=“play”)
私人名单行动;
}
例如,我的类
PassingPlay
只能允许以下类型的
PlayerActions

  • passion
  • ReceptionAction
  • SackAction
  • interceptonaction
  • SackAction
    排除
    ReceptionAction
RunningPlay
只能允许以下类型的
PlayerActions

  • 必需的
    RunAction
  • TackleAction
  • FumbleAction
等等


理想的解决方案不一定要容易构建,只要易于维护。我目前唯一的想法就是给每个子类一个返回字符串[][]的方法,但这太蹩脚、麻烦和非面向对象了——我甚至不想开始实现它。

你知道
@PrePersti
@PreUpdate
等吗?Hibernate 4.0中的手动页面(抱歉,我试图找到指向Hibernate版本的链接,但它已经很旧了。无论如何,这些侦听器在以前的版本中已经存在)。顺便问一下,为什么不升级到最新的Hibernate?如果你是从头开始一个项目可能是有用的!PS:如果你需要,我可以提供一个“真实”的答案,而不仅仅是这个建议
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Play implements Countable, Serializable, Locatable {
  @OneToMany(cascade=CascadeType.ALL, mappedBy="play")
  private List<PlayerAction> actions;
}