Как я могу заставить OpenJPA работать для стратегии объединенного наследования? - PullRequest
2 голосов
/ 21 апреля 2011

Мне не удается получить стратегию объединенного наследования, работающую с OpenJPA 2.1.0 и приложением Java EE, работающим на Glassfish 3.1. Вот мои аннотации JPA:

 @Entity
    @Table(name = "user_account")
    @Inheritance(strategy = InheritanceType.JOINED)
    @DiscriminatorColumn(name = "account_type", discriminatorType = DiscriminatorType.STRING)
    public abstract class UserAccount implements Serializable {
    ...

    @Entity
    @Table(name = "merchant")
    @DiscriminatorValue("MERCHANT")
    @PrimaryKeyJoinColumn(name = "merchant_id", referencedColumnName = "account_id")
    public class Merchant extends UserAccount {
    ...

и это исключение, которое я получаю:

 java.lang.ClassNotFoundException: Could not map discriminator value "MERCHANT" to any known subclasses of the requested class "my.app.model.UserAccount" (known discriminator values: [UserAccount]).
        at org.apache.openjpa.jdbc.meta.strats.ValueMapDiscriminatorStrategy.getClass(ValueMapDiscriminatorStrategy.java:98)
        at org.apache.openjpa.jdbc.meta.strats.InValueDiscriminatorStrategy.getClass(InValueDiscriminatorStrategy.java:121)
        at org.apache.openjpa.jdbc.meta.Discriminator.getClass(Discriminator.java:398)
        at org.apache.openjpa.jdbc.meta.strats.SuperclassDiscriminatorStrategy.getClass(SuperclassDiscriminatorStrategy.java:63)
        at org.apache.openjpa.jdbc.meta.Discriminator.getClass(Discriminator.java:398)
        at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:397)

Кажется, мой дискриминатор подкласса не улавливается. Я пробовал различные комбинации, включая перечисление всех моих сущностей в persistence.xml, но безрезультатно. Я также попытался вообще пропустить аннотации @Discriminator (которые не являются обязательными для объединенной стратегии), это по крайней мере позволило мне напрямую запрашивать подклассы, но нарушало полиморфные запросы.

Есть идеи?

...