java - 加载 javassist-ed Hibernate 实体

标签 java hibernate jpa

我有一个 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)?

谢谢。

最佳答案

尝试使用 org.hibernate.proxy.HibernateProxyHelper.getClassWithoutInitializingProxy(superClass) 而不是 superClass.getClass()

关于java - 加载 javassist-ed Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139611/

相关文章:

Java:在 HTTP get 请求中打印无关行

java - 如何对应该导致编译错误的代码进行单元测试

javax.servlet.ServletException : Filter execution threw an exception java. lang.StackOverflowError Struts

hibernate - 如何使用 hibernate 生成自定义 ID,而它必须是表的主键

java - 如何使用 split() 删除路径中的最后一个目的地?

sql - Hibernate Envers SQL 审计

java - 解码 xml 资源后无法将数据存储在数据库中

jpa - Apache Aries 托管 JPA 支持哪些 JPA 提供程序?

java - JPQL 通过精确数组匹配查找实体

java - 如何使用 Java 在 Selenium WebDriver 中按 "ALT+S"