代码之家  ›  专栏  ›  技术社区  ›  Damo

正在加载javassisted Hibernate实体

  •  5
  • Damo  · 技术社区  · 17 年前

    getAsString()

    MySuperClass superClass = (MySuperClass)value;
    if(superClass != null) {
      return String.valueOf(superClass.getClass().getName()+":"+superClass.getId());
    }
    

    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() 是一个代理。所以,与其得到 com.company.MyEntity 当我执行getClass().getName()时,我得到 com.company.MyEntity_$$_javassist_48 find() .

    是否有任何方法(除了字符串操作)来获取具体的类名(例如com.company.MyEntity)?

    3 回复  |  直到 17 年前
        1
  •  9
  •   ChssPly76    17 年前

    superClass.getClass() org.hibernate.proxy.HibernateProxyHelper.getClassWithoutInitializingProxy(superClass) .

        2
  •  6
  •   Daniel Bleisteiner    16 年前

    @Table(name = SuperClass.TABLE_NAME)
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name = SuperClass.TABLE_DISCRIMINATOR, discriminatorType = DiscriminatorType.STRING)
    

    @DiscriminatorValue(value = EntityClass.TABLE_DISCRIMINATOR)
    

    Hibernate.getClass(…)

        3
  •  3
  •   Asaf    14 年前

    AbstractEntity ConcreteEntity <- ConcreteEntityProxy

    // This should fail - trying to create an abstract class
    HibernateProxyHelper.getClassWithoutInitializingProxy(superClass).newInstance()
    

    protected <T> T deproxy(T maybeProxy) {
        if (maybeProxy instanceof HibernateProxy) {
            return (T) ((HibernateProxy) maybeProxy).getHibernateLazyInitializer().getImplementation();
        }
        return maybeProxy;
    }