我只需要使用 EntityManager 实例来检索某个实体的数据库表名,这可能吗?
或以任何方式加载具有相关实体类的所有映射表。
PS:我正在使用没有Annotations的Hibernate v4.2.7
答案 0 :(得分:1)
一旦将它从EntityManager中删除,就可以从休眠的SessionFactory中获取它:
@PersistenceContext
EntityManager entityManager;
public String getTableName(Class entityClass){
SessionFactory sessionFactory = ((Session) entityManager.getDelegate()).getSessionFactory();
ClassMetadata classMetadata = sessionFactory.getClassMetadata(entityClass);
SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) sessionFactory;
AbstractEntityPersister entityPersister
= (AbstractEntityPersister) sessionFactoryImpl.getEntityPersister(classMetadata.getEntityName());
return entityPersister.getTableName();
}
找不到合适的API来使用普通的EntityManager。 如果您被允许使用该实现,那么这对我有用。
答案 1 :(得分:0)
Maciej的回答是遗漏了一些代码,我找到了一种方法来减少步骤:
private String getTableName ( Class entityClass ) {
SessionFactory sessionFactory = ( ( Session ) getEntityManager().getDelegate() ).getSessionFactory();
AbstractEntityPersister persister = ( AbstractEntityPersister ) sessionFactory.getClassMetadata( entityClass );
return persister.getTableName();
}
我试图编辑他的答案但被拒绝= /