加载javassist -ed Hibernate实体 [英] Loading javassist-ed Hibernate entity

查看:85
本文介绍了加载javassist -ed Hibernate实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆