【发布时间】:2009-07-16 18:58:49
【问题描述】:
我有一个 JSF 转换器,用于包含几种不同实体类型的 SelectItem 列表。在getAsString() 方法中,我将字符串创建为以“:”为后缀的类名和ID。
MySuperClass superClass = (MySuperClass)value;
if(superClass != null) {
return String.valueOf(superClass.getClass().getName()+":"+superClass.getId());
}
这使我可以在从 UI 返回的途中在 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,而是得到了com.company.MyEntity_$$_javassist_48,所以它在find() 上失败了。
有没有办法(除了字符串操作)来获取具体的类名(例如 com.company.MyEntity)?
谢谢。
【问题讨论】: