加载javassist -ed Hibernate实体 [英] Loading javassist-ed Hibernate entity
问题描述
我有一个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()时,我得到了 com.company.MyEntity _ $$ _ javassist_48
然后在 find()
上失败。
有没有什么办法(除了字符串操作)来获取具体的类名(例如com.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 com.company.MyEntity
when I do a getClass().getName() I am getting com.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. com.company.MyEntity)?
Thanks.
解决方案 Instead of superClass.getClass()
try org.hibernate.proxy.HibernateProxyHelper.getClassWithoutInitializingProxy(superClass)
.
这篇关于加载javassist -ed Hibernate实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文