Мне не удается получить стратегию объединенного наследования, работающую с 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 (которые не являются обязательными для объединенной стратегии), это по крайней мере позволило мне напрямую запрашивать подклассы, но нарушало полиморфные запросы.
Есть идеи?