如何检索没有Table注释的实体的映射数据源tableName?

时间:2017-01-11 21:36:12

标签: java hibernate jpa

我只需要使用 EntityManager 实例来检索某个实体的数据库表名,这可能吗?

或以任何方式加载具有相关实体类的所有映射表。

PS:我正在使用没有Annotations的Hibernate v4.2.7

2 个答案:

答案 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();
}

我试图编辑他的答案但被拒绝= /