我有一个JSF转换器,用于包含几种不同实体类型的SelectItem列表。在 getAsString()方法中,我创建字符串作为类名后缀:和ID。
MySuperClass superClass =(MySuperClass)value; if(superClass!= null){ return String.valueOf(superClass.getClass()。getName()+:+ superClass.getId()); code $这允许我在中加载正确的实体, getAsObject()这样做:
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);我的问题是我的实体在 getAsString()是一个代理。所以,当我做一个getClass()。getName()时,我得到了 company.MyEntity _ $$ _ javassist_48 然后在 find()上失败。
有没有什么办法(除了字符串操作)来获取具体的类名(例如company.MyEntity)?
感谢。
解决方案而不是 superClass.getClass() try org.hibernate.proxy.HibernateProxyHelper.getClassWithoutInitializingProxy(superClass)。
I have a JSF converter that I use for a SelectItem list containing several different entity types. In the getAsString() method I create the string as the class name suffixed with ":" and the ID.
MySuperClass superClass = (MySuperClass)value; if(superClass != null) { return String.valueOf(superClass.getClass().getName()+":"+superClass.getId()); }This allows me to load the correct entity in the getAsObject() on the way back from the UI by doing this :
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);My problem is that my entity in getAsString() is a proxy. So instead of getting company.MyEntity when I do a getClass().getName() I am getting company.MyEntity_$$_javassist_48 so then it fails on the find().
Is there any way (aside from String manipulation) to get the concrete class name (eg. company.MyEntity)?
Thanks.
解决方案Instead of superClass.getClass() try org.hibernate.proxy.HibernateProxyHelper.getClassWithoutInitializingProxy(superClass).
更多推荐
加载javassist
发布评论