【问题标题】:JPA Entity inheritance using DiscriminatorColumn with a 'wild' DiscriminatorValueJPA 实体继承使用 DiscriminatorColumn 和“野生”DiscriminatorValue
【发布时间】:2011-12-23 03:50:48
【问题描述】:

我正在尝试实现 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。 实际上,如果你认为它是超类的地方,它实际上更有意义,如果没有更具体的实现,请使用超类。

有谁知道这样做的方法吗?

谢谢!

【问题讨论】:

标签: java inheritance jpa openjpa


【解决方案1】:

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

SELECT ... WHERE kind = 1 

如果您可以在此处指定正则表达式,则它不能转换为 SQL,因为它不支持此类结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多