You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Phill <gd...@yahoo.it> on 2011/04/20 16:39:18 UTC

Could not map discriminator value to any known subclasses

I'm having some trouble with joined inheritance, my mappings are as follows but OpenJPA doesn't seem to be picking up my @DiscriminatorValue.
Probably missing something obvious but can't see what... any suggestions much appreciated

@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)
     at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:333)
     at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
     at org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheStoreManager.java:360)
     at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
     at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
     at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1022)
     at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:980)
     at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:902)
     at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1041)
     at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)
     at org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381)
     at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)
     at org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:59)
     at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
     at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1251)
     at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007)
     at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
     at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
     at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
     at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:305)
     at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:319)

Re: Could not map discriminator value to any known subclasses

Posted by Phill <gd...@yahoo.it>.
I'm using 2.1.0 and enhancing with the ant PCEnhancerTask, it's running in Glassfish 3.1 with war packaging.
Merchant isn't the only subclass of UserAccount and the other @DiscriminatorValue annotated classes aren't getting picked-up either.
I've not got any xml mapping files and I've tried explicitly listing all entity classes in persistence.xml, which doesn't make any difference.
I'm a bit stumped!
-Phill


On 21/apr/2011, at 17.11, Michael Dick wrote:

> Hi Phill,
> 
> The snippets from your entities are correct. Which version of OpenJPA are
> you using, and how do you do enhancement?
> 
> Could the app be picking up an old version of Merchant that doesn't have the
> annotation, or an XML mapping file that reset it to a different value?
> 
> -mike
> 
> On Wed, Apr 20, 2011 at 9:39 AM, Phill <gd...@yahoo.it> wrote:
> 
>> I'm having some trouble with joined inheritance, my mappings are as follows
>> but OpenJPA doesn't seem to be picking up my @DiscriminatorValue.
>> Probably missing something obvious but can't see what... any suggestions
>> much appreciated
>> 
>> @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)
>>    at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:333)
>>    at
>> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
>>    at
>> org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheStoreManager.java:360)
>>    at
>> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
>>    at
>> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
>>    at
>> org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1022)
>>    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:980)
>>    at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:902)
>>    at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1041)
>>    at
>> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)
>>    at
>> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381)
>>    at
>> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)
>>    at
>> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:59)
>>    at
>> org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
>>    at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1251)
>>    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007)
>>    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
>>    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
>>    at
>> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
>>    at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:305)
>>    at
>> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:319)


Re: Could not map discriminator value to any known subclasses

Posted by Michael Dick <mi...@gmail.com>.
Hi Phill,

The snippets from your entities are correct. Which version of OpenJPA are
you using, and how do you do enhancement?

Could the app be picking up an old version of Merchant that doesn't have the
annotation, or an XML mapping file that reset it to a different value?

-mike

On Wed, Apr 20, 2011 at 9:39 AM, Phill <gd...@yahoo.it> wrote:

> I'm having some trouble with joined inheritance, my mappings are as follows
> but OpenJPA doesn't seem to be picking up my @DiscriminatorValue.
> Probably missing something obvious but can't see what... any suggestions
> much appreciated
>
> @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)
>     at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:333)
>     at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
>     at
> org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheStoreManager.java:360)
>     at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
>     at
> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
>     at
> org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1022)
>     at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:980)
>     at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:902)
>     at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1041)
>     at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)
>     at
> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381)
>     at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)
>     at
> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:59)
>     at
> org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
>     at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1251)
>     at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1007)
>     at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
>     at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
>     at
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
>     at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:305)
>     at
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:319)