This is still a problem for EntityManager#unwrap in case of Hibernate. As of Hibernate 5, SessionImpl also implements EntityManager, so unwrapping with Session.class would return this. Now this is problematic because you special case the returning of this but don't respect the case when the return type is generic. IMO you should always return the real instance if the return type is generic. Another option would be to analyze the parameters and check if you can resolve the type variable to a Class object which is possible in this case, but I am not sure if it's worth the trouble. What exactly is the reason for trying to "protect" the original instance from escaping? Is there an option to disable this behavior? This currently breaks some integration code with newer hibernate versions.
|