JPA Entity继承使用DiscriminatorColumn和'wild'DiscriminatorValue

时间:2011-12-23 03:50:49

标签: java inheritance jpa openjpa

我正在尝试在JPA实体之间实现继承关系。

借用以下示例: http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/jpa_overview_mapping_discrim.html

@Entity
@Table(name="SUB", schema="CNTRCT")
@DiscriminatorColumn(name="KIND", discriminatorType=DiscriminatorType.INTEGER)
public abstract class Subscription {
          ...
}

@Entity(name="Lifetime")
@DiscriminatorValue("2")
public class LifetimeSubscription
    extends Subscription {
    ...
}
}

@Entity(name="Trial")
@DiscriminatorValue("3")
public class TrialSubscription
    extends Subscription {
    ...
}

我需要做的是有一个额外的实体来捕获其余部分,例如:

  @Entity(name="WildCard")
    @DiscriminatorValue(^[23])
    public class WildSubscription
        extends Subscription {
        ...
    }

如果它与LifetimeSubscription或TrialSubscription不匹配,它将匹配WildSubscription。 如果你把它看作wild是超类的话,它实际上会更有意义,如果没有更合适的实现,那就使用超类。

任何人都知道这样做的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

JPA API在此仅允许普通值,原因是:鉴别器值映射到SQL WHERE

SELECT ... WHERE kind = 1 

如果你可以在这里指定正则表达式,它就不能转移到SQL,因为它不支持这样的结构。