You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by atanamir <st...@hyarros.com> on 2010/05/08 02:06:31 UTC

Generic MappedSuperclass

Hello,

>From research online, the following pattern seems to be valid JPA:

public abstract class Identifiable<T> {
  private T id;

  @Id
  public T getId() { return id;}
  private void setId(T t) { id = t; }
}

@Entity
@AttributeOveride(name="id", column=@Column(name="someColumnID")) 
public class Cats extends Identifiable<Integer> {
  ...
}

*OR*

public class OtherThing extends Identifiable<OtherThing.PK> {
  @Embeddable
  protected static class PK { 
     ...
  }
  ...
}


However, OpenJPA gives the following (cryptic?) exception:

Superclass field "java.lang.Object.id" is mapped in the metadata for
subclass "Cats", but is not a persistent field.

"id" isn't even in java.lang.Object, so I'm having problems understanding
what the exception means.

According to the penultimate post in this thread:
http://forums.sun.com/thread.jspa?threadID=5268944

Hibernate's JPA implementation supports the above pattern.

Thanks!
atanamir
-- 
View this message in context: http://openjpa.208410.n2.nabble.com/Generic-MappedSuperclass-tp5021841p5021841.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Generic MappedSuperclass

Posted by atanamir <st...@hyarros.com>.
Yeah, I did.  My mistake, I left that out in my code above.  There *is* a
@MappedSuperclass annotation on the superclass Identifiable.  The precise
stack trace of the exception is as follows; it is at the end of a long
stream of nested exceptions.  The exception happens after I attempt to
create a query.

<openjpa-2.0.0-r422266:935683 fatal user error>
org.apache.openjpa.persistence.ArgumentException: Superclass field
"java.lang.Object.id" is mapped in the metadata for subclass
"org.ltmc.eve.dump.inventory.Group", but is not a persistent field.
	at
org.apache.openjpa.meta.ClassMetaData.getSuperclassField(ClassMetaData.java:1093)
	at
org.apache.openjpa.meta.ClassMetaData.resolveDefinedSuperclassFields(ClassMetaData.java:1387)
	at
org.apache.openjpa.meta.ClassMetaData.defineSuperclassFields(ClassMetaData.java:1365)
	at
org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:412)
	at
org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:736)
	at
org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:625)
	at
org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
	at
org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
	at
org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:439)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:176)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:152)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:242)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:212)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:205)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$200(JPQLExpressionBuilder.java:81)
	at
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:2387)
	at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:61)
	at
org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:154)
	at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:671)
	at
org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:652)
	at
org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:618)
	at
org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:680)
	at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:587)
	at
org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:985)
	at
org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:971)
	at
org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:100)

... (my code stack trace after this)


Thanks,
atanamir
-- 
View this message in context: http://openjpa.208410.n2.nabble.com/Generic-MappedSuperclass-tp5021841p5023229.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Generic MappedSuperclass

Posted by moodymeedo <mo...@yahoo.com>.
Have u added the @MappedSuperClass annotation to the beginning of the parent
class?
-- 
View this message in context: http://openjpa.208410.n2.nabble.com/Generic-MappedSuperclass-tp5021841p5023217.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.