2011-12-23 139 views
1

我试图实现JPA实体之间的继承关系。JPA实体继承使用DiscriminatorColumn与'野'DiscriminatorValue

借鉴的例子来自: 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是超类的地方,并且如果没有更适合的更具体的实现,它实际上会更有意义,请使用超类。

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

谢谢!

+0

另一个示例是http://stackoverflow.com/q/2713025/187817 只有定义了一个通用操作 – Link 2011-12-23 04:06:32

回答

1

JPA的API只允许普通值这里,并且是有原因的:鉴别值映射到SQL WHERE

SELECT ... WHERE kind = 1 

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