Ich habe einen JSF-Konverter, den ich für eine SelectItem-Liste verwenden, die mehrere verschiedene Entitätstypen enthält. In der getAsString()
Methode erstelle ich die Zeichenfolge als Klassenname mit dem Suffix ":" und der ID.Loading javassist-ed Hibernate-Entität
MySuperClass superClass = (MySuperClass)value;
if(superClass != null) {
return String.valueOf(superClass.getClass().getName()+":"+superClass.getId());
}
Dies ermöglicht es mir, die richtige Einheit in den getAsObject()
auf dem Rückweg von der Benutzeroberfläche zu laden, indem Sie diese:
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);
Mein Problem ist, dass meine Einheit in getAsString()
ein Proxy ist. Anstatt also com.company.MyEntity
zu bekommen, wenn ich getClass() mache. GetName() bekomme ich com.company.MyEntity_$$_javassist_48
, dann scheitert es an der find()
.
Gibt es einen Weg (neben der Manipulation von Zeichenketten), den konkreten Klassennamen zu erhalten (zB com.company.MyEntity)?
Danke.
I‘ ve verwendet ((HibernateProxy) -Entity) .getHibernateLazyInitializer(). getEntityName() oder getPersistentClass() aber HibernateProxy Wraps, so ist es wahrscheinlich der Weg zu gehen. –
oder einfach Hibernate.getClass() –
Große Antwort Jungs. Es hat mir sehr geholfen. – Mythul