jsr338-experts@jpa-spec.java.net

[jsr338-experts] Re: proposal : _at_Entity on interfaces

From: Linda DeMichiel <linda.demichiel_at_oracle.com>
Date: Fri, 16 Mar 2012 14:52:55 -0700

Steve, all,

As you might surmise from the responses on this thread, I'm not seeing enough
consensus to pursue this proposal further. It is something that could be
reconsidered in JPA 2.2 should opinions change in the interim.

thanks,

-Linda


On 3/9/2012 10:04 AM, Steve Ebersole wrote:
> I'd like to propose that JPA 2.1 allow @Entity on Java interfaces not just classes. The main reason is typing in spec
> contracts. For domain models that leverage interfaces, it is usually desirable to deal with the interfaces over the
> implementation classes. For example, such applications would generally prefer to attempt to load or get a reference to
> an instance based on the interface name as opposed to the class name. E.g.
>
> public interface Person {
> ...
> }
>
> @Entity
> public class PersonImpl implements Person {
> ...
> }
>
> EntityManager em = ...;
> Person p = em.find( Person.class, theKey );
>
> But this does not work today in a portable manner. To work in the most portable manner, I think the @Entity annotated
> interface also would need to name the "persistent implementation class":
>
> @Entity( impl = PersonImpl.class )
> public interface Person {
> ...
> }
>
> public class PersonImpl implements Person {
> ...
> }
>
> It could be up to each provider whether or not to support @Entity on an interface that did not specify a "persistent
> implementation class".
>
> Another way to look at this is as basically "aliasing" the entity type metadata using the interface name instead of the
> implementation class name.
>
> -Steve