Hi Fay, The JPA 1.0 and 2.0 draft spec clearly state that this isn't a requirement of JPA, but a note in the OpenJPA documentation (section 1.3) seems to indicate that OpenJPA does support it as an OpenJPA extension.
<openjpa doc> Unlike true entities, you cannot query a mapped superclass, pass a mapped superclass instance to any EntityManager or Query methods, or declare a persistent relation with a mapped superclass target. ...then Note OpenJPA allows you to query on mapped superclasses. A query on a mapped superclass will return all matching subclass instances. OpenJPA also allows you to declare relations to mapped superclass types; however, you cannot query across these relations. </openjpa doc> Using a mapped superclass with the em.find() operation over very simple entity subclasses seemed to work fine, but JPQL queries do not. -Jeremy On Tue, Apr 21, 2009 at 11:32 AM, Fay Wang <fyw...@yahoo.com> wrote: > > Just found that in JPA 2.0 Proposed Final Draft (March 13, 2009): > > Spec 2.11.2: > A mapped superclass, unlike an entity, is not queryable and cannot be > passed as an argument to EntityManager or Query operations. > > > --- On Tue, 4/21/09, Jeremy Bauer <techhu...@gmail.com> wrote: > > > From: Jeremy Bauer <techhu...@gmail.com> > > Subject: Re: Can't query against a MappedSuperclass > > To: users@openjpa.apache.org > > Date: Tuesday, April 21, 2009, 8:52 AM > > Hi Jim, > > > > It looks like there are inconsistencies in the manual and > > provider. I was > > able use the em.find() operation with a mapped superclass, > > but could not run > > a JPQL query which used one. To perform the find > > operation, OpenJPA queried > > known entity subclasses of the mapped superclass until it > > found one that > > matched the specified ID. I tried using mapped > > superclasses with the base > > 1.0 release to make sure this capability hadn't regressed > > and 1.0 behaved > > the same. So, it doesn't look like this ever worked with > > JPQL. > > > > Have you taken a look at using entity enheritance and the > > various entity > > inheritance strategies? The TABLE_PER_CLASS strategy > > may map fairly well to > > a domain model that currently uses mapped superclass over > > multiple disparate > > entities. It provides query capabilities over the > > superclass entity type. > > > > I've opened JIRA OPENJPA-1043[1] for this issue. > > Minimally, the docs should > > be updated to reflect that mapped superclasses are only > > supported on a find > > until such a time they can be supported in a query. > > > > -Jeremy > > > > [1] https://issues.apache.org/jira/browse/OPENJPA-1043 > > > > On Mon, Apr 20, 2009 at 4:33 PM, Fay Wang <fyw...@yahoo.com> > > wrote: > > > > > > > > Hi, > > > According to openjpa manual: > > > > > > "Unlike true entities, you cannot query a mapped > > superclass" > > > > > > > > > > http://openjpa.apache.org/builds/latest/docs/manual/manual.html#jpa_overview_meta_embeddablesuper > > > > > > > > > > > > --- On Mon, 4/20/09, jim weaver <jewea...@us.ibm.com> > > wrote: > > > > > > > From: jim weaver <jewea...@us.ibm.com> > > > > Subject: Can't query against a MappedSuperclass > > > > To: users@openjpa.apache.org > > > > Date: Monday, April 20, 2009, 12:38 PM > > > > > > > > I have the following: > > > > > > > > @MappedSuperclass class A { } > > > > @Entity class B extends A { } > > > > @Entity class C extends A { } > > > > > > > > and I try to do this type of query: SELECT a FROM > > A a > > > > > > > > I receive error message "An error occurred while > > parsing > > > > the query filter > > > > "SELECT a FROM A a". Error > > > > message: The name "A" is not a > > recognized > > > > entity or identifier. Perhaps you meant B, > > which is a > > > > close match. Known > > > > entity names: [B, C]" > > > > > > > > A is defined in my persistence.xml and my tables > > do have > > > > the inherited > > > > fields from it so I'm pretty sure jpa is > > recognizing it. > > > > > > > > The OpenJPA doc says that the query is > > supported.....this > > > > is from the 1.2.0 > > > > doc: > > > > > > > > Note > > > > OpenJPA allows you to query on mapped > > superclasses. A query > > > > on a mapped > > > > superclass will return all matching subclass > > instances. > > > > > > > > > > > > -- > > > > View this message in context: > > > > http://n2.nabble.com/Can%27t-query-against-a-MappedSuperclass-tp2665700p2665700.html > > > > Sent from the OpenJPA Users mailing list archive > > at > > > > Nabble.com. > > > > > > > > > > > > > > > > > > > > > > > > > >