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.