JPA Наследование сущностей с использованием DiscriminatorColumn с «диким» DiscriminatorValue - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь реализовать наследование отношений между сущностями 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 Ответ

1 голос
/ 02 января 2012

JPA API допускает только простые значения здесь, и по причине: значения дискриминатора отображаются в SQL WHERE:

SELECT ... WHERE kind = 1 

Если бы вы могли указать здесь регулярные выражения, это не могло бы быть передано в SQL, поскольку он не поддерживает такие конструкции.

...