[hibernate-dev] Proxies and typing
    Steve Ebersole 
    steve at hibernate.org
       
    Wed Jan 25 16:26:19 EST 2012
    
    
  
BTW, I did go back and verify that indeed the mismatch  is with 
@Proxy.proxyClass specifying an interface.  Consider an example:
@Entity
@Proxy(proxyClass=User.class)
public class UserImpl implements User {
    ...
}
You will never be able to cast proxies instance of this thing to 
UserImpl.  This call will fail with CCE:
UserImpl u = (UserImpl) session.load( UserImpl.class, ... )
get() may or may not work depending.
This is the source of us not being able to offer generic signatures.
On Wed 25 Jan 2012 01:33:14 PM CST, Steve Ebersole wrote:
> In regards to the new "load access", a user asked why we don't 
> leverage generics.
>
> The problem is the existence of @Proxy#proxyClass. We have the same 
> issue with Session#load/get taking the entity Class. We can't use a 
> generic sig like:
>
> public <T> T load(Class<T> entityType, ...)
>
> because at times we return objects that are not typed to <T>. I have 
> to dive back into the specifics, but IIRC the problem is that we don't 
> do the expected thing and have the generated proxy class extend from 
> the entity class if @Proxy#proxyClass names an interface. I remember 
> this change way back when, but the specifics of why escape me at the 
> moment.
>
> IMO I think providing generic signatures would obviously be a great 
> improvement. Is it enough to change this behavior?
>
> WDYT?
>
-- 
steve at hibernate.org
http://hibernate.org
    
    
More information about the hibernate-dev
mailing list