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.
> > > >
> > > >
> > >
> > >
> > >
> > >
> >
>
>
>
>

Reply via email to