我怎么知道一个Class是否被映射为Hibernate实体?

时间:2009-10-22 07:43:02

标签: java hibernate

我有一个对象。我怎么知道它的类是否映射到Hibernate中的表?

4 个答案:

答案 0 :(得分:5)

编辑:我的原始答案有效但会初始化单位代理,这可能是不受欢迎的。

更好的解决方案

boolean isHibernateEntity = sessionFactory.getClassMetadata( HibernateProxyHelper.getClassWithoutInitializingProxy( yourObject ) ) != null;

原始回答:

boolean isHibernateEntity = sessionFactory.getClassMetdata( Hibernate.getClass( yourObject ) ) != null;

答案 1 :(得分:1)

这样,您可以获取由Hibernate管理的所有实体:sessionFactory.getMetamodel()。总结一下:

boolean isHibernateEntity(Object obj) {
    Class<?> cl = HibernateProxyHelper.getClassWithoutInitializingProxy(obj);
    for (EntityType<?> entity : sessionFactory.getMetamodel().getEntities())
        if (entity.getJavaType().equals(cl))
            return true;
    return false;    
}

答案 2 :(得分:0)

这里没有sessionFactory

private boolean isEntityClass(Object o){
    if(o != null){
        Type[] interfaces = o.getClass().getGenericInterfaces();
        for(Type interf : interfaces)
            if(interf.equals(HibernateProxy.class))
                return true;
    }
    return false;
}

答案 3 :(得分:0)

现在,您可以通过JPA 2.0中的javax.persistence.metamodel.Metamodel来确定某个类是否是实体。如果您不使用JPA,请org.hibernate.Metamodel。例如:

public boolean isEntity(Class<?> clazz){
    Metamodel metamodel = entityManager.getMetamodel();
    try {
        metamodel.entity(clazz);
    } catch (IllegalArgumentException e) {
        // NOTE: the exception means the class is NOT an entity. There is no reason to log it.
        return false;
    }
    return true;
}