[hibernate-issues] [Hibernate-JIRA] Created: (JPA-22) EntityManager.contains unsupport Entity enhanced by CGLIB

vangie du (JIRA) noreply at atlassian.com
Fri Sep 2 14:29:04 EDT 2011


EntityManager.contains unsupport Entity enhanced by CGLIB
---------------------------------------------------------

                 Key: JPA-22
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/JPA-22
             Project: Java Persistence API
          Issue Type: Bug
    Affects Versions: 1.0.1
            Reporter: vangie du


invoke contains() method with a entity enhanced by CGLIB while throw IllegalArgumentException.
other methods like persit() remove() can config the hibernate interceptor by override the getEntityName().

public class UnByteCodeProxyInterceptor extends EmptyInterceptor {
	private static final long serialVersionUID = -6422637558312349795L;

	@Override
	public String getEntityName(Object object) {
		if (object != null) {
			Class<?> cl = object.getClass();
			if (ProxyBeanUtils.isProxy(cl)) {
				cl = cl.getSuperclass();
			}
			return cl.getName();
		}
		else {
			return null;
		}
	}

}

but the contains() not invoke the entityNameResolver to get Entity name.

statement in  org.hibernate.ejb.AbstractEntityManagerImpl.contains()

getSession().getSessionFactory().getClassMetadata( entity.getClass() )

change to 

getSession().getSessionFactory().getClassMetadata( ((SessionImplementor)getSession()).bestGuessEntityName(entity) )

can workaround this problem.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list