As an API user if I'm expected to use the _User_ interface, I think I would expect the annotations to be defined on the interface, not on the UserImpl.class .. as with the rest of mapping annotations.
I don't know about the technical requirements to make this implementable; I guess you need some UserImpl class as a prototype? If so wouldn't it make sense to have @Entity @PrototypedBy(UserImpl.class) public interface User { @Id Long getUserId(); void setUserId(Long id); } public class UserImpl implements User { ... } And ideally I would expect the "prototype" class to be not needed / optional. Finally, since I'd expect the setter / getter implementations in the proxy to be generated by us, could we have them take care of bi-directional relations, to update both sides of relation automatically and correctly? I was speaking recently to a Ruby developer who just switched to JavaEE, and he pointed out that this requirement is long gone in other persistence APIs. I know by experience this also frequently bites beginners, and even experienced developers have to write code about this.. this looks like a chance to evolve? Sanne On 21 March 2012 01:19, Steve Ebersole <st...@hibernate.org> wrote: > Forwarding a part of this discussion that got inadvertently limited to > just Sanne and myself. > > Bringing this back up because this is most likely not going to be > accepted into JPA 2.1. Anyway, I am all for going down the path that: > > public interface User { > ... > } > > @Entity > @Proxy(proxyClass=User.class) > public class UserImpl implements User { > ... > } > > > means that users would use User.class in all phases of the API: > User user = session.byId( User.class ).get( 1 ); > EntityType<User> jpaEntityType = emf.getMetamodel().entity(User.class ); > etc. > > I think that is the cleanest path that allows generic-typed api. > > > -------- Original Message -------- > Subject: Re: [hibernate-dev] Proxies and typing > Date: Thu, 26 Jan 2012 14:37:22 +0000 > From: Sanne Grinovero <sa...@hibernate.org> > To: Steve Ebersole <st...@hibernate.org> > > On 26 January 2012 14:02, Steve Ebersole <st...@hibernate.org> wrote: >> These emails are just between you and me. Not sure if thats what you >> intended. I erroneously replied to just you at one point but then sent to >> whole list also. Anyway, just mentioning... > > Ah, sorry, didn't notice either. Well last reply then, will try resume > the public conversation if I have more comments. > >> The idea of requiring the interface is appealing in a way. But, for >> example, there are odd inconsistencies then. For example >> >> User user = session.byId( User.class ).get( 1 ); >> >> but then >> >> EntityType<UserImpl> jpaEntityType = emf.getMetamodel().entity( >> UserImpl.class ) >> >> >> Which I guess is my biggest hang up. On one side we are saying that the >> impl is the entity and on the other saying the interface is the entity. >> >> You know me and consistency :) > > I agree on consistency, but this is tricky, I'm not sure if you need > the UserImpl at all, maybe you can remove it from the MetaModel (maybe > after having read out other metadata from it). > > Isn't such a mapping definition like a dirty workaround to actually > map the interface ? > > Sanne > _______________________________________________ > hibernate-dev mailing list > hibernate-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/hibernate-dev _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev