我有一个对象。我怎么知道它的类是否映射到Hibernate中的表?
答案 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;
}