Tengo un convertidor JSF que uso para una lista SelectItem que contiene varios tipos de entidades diferentes. En el método getAsString()
creo la cadena como el nombre de clase con el sufijo ":" y la ID.Cargando javassist-ed Hibernate entidad
MySuperClass superClass = (MySuperClass)value;
if(superClass != null) {
return String.valueOf(superClass.getClass().getName()+":"+superClass.getId());
}
Esto me permite cargar la entidad correcta en el getAsObject()
en el camino de regreso de la interfaz de usuario al hacer esto:
String className = value.substring(0, value.indexOf(":"));
long id = Long.parseLong(value.substring(value.indexOf(":")+1));
Class<T> entitySuperClass = (Class<T>) Class.forName(className);
MySuperClass superClass = (MySuperClass)getEntityManager().find(entitySuperClass, id);
Mi problema es que mi entidad en getAsString()
es un proxy. Entonces en lugar de obtener com.company.MyEntity
cuando hago un getClass(). GetName() obtengo com.company.MyEntity_$$_javassist_48
entonces falla en el find()
.
¿Hay alguna manera (además de la manipulación de cadenas) para obtener el nombre de la clase concreta (por ejemplo, com.company.MyEntity)?
Gracias.
I' ve used ((HibernateProxy) entidad) .getHibernateLazyInitializer(). getEntityName() o getPersistentClass() pero HibernateProxy lo ajusta así que probablemente sea el camino a seguir. –
o simplemente Hibernate.getClass() –
Buena respuesta chicos. Me ayudó mucho. – Mythul