java - 使用 DiscriminatorColumn 和 'wild' DiscriminatorValue 进行 JPA 实体继承

标签 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 匹配。 如果您认为狂野是父类(super class),并且如果没有适合的更具体的实现,则使用父类(super class),那么它实际上更有意义。

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

谢谢!

最佳答案

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

SELECT ... WHERE kind = 1 

如果您可以在此处指定正则表达式,则它无法转移到 SQL,因为它不支持此类构造。

关于java - 使用 DiscriminatorColumn 和 'wild' DiscriminatorValue 进行 JPA 实体继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612078/

相关文章:

java - 如何从 Java 中的 LinkedList 类外部声明 Node 类型?

java - 我正在尝试将 EC 公钥从 Android 导出到 iOS,最好的方法是什么?

java - 声明来自套接字的输入/输出流以防止程序继续

java - Hibernate子类id在每个子类的表中生成

java - JPA 外键为空

java - 如何用单词创建 IF 语句?

javascript - 从继承的实例创建 javascript 基类对象

c++ - 强制调用 "highest"重载函数而不是基函数

Python继承问题

java - Spring Batch 输出记录多于输入记录