java - 如何在没有表注释的情况下检索实体的映射数据源表名?

标签 java hibernate jpa

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

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

PS:我使用的是没有注释的 Hibernate v4.2.7

最佳答案

一旦将其从 EntityManager 中剥离出来,您就可以从 hibernate 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。 如果您被允许参与实现,那么这对我有用。

关于java - 如何在没有表注释的情况下检索实体的映射数据源表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41601111/

相关文章:

java - 无法找到逻辑名称为 : product 的列

java - hibernate 中 Set 和 Collection 的区别

java - 为什么 ormlite 有自己的注释?

java - JPA @NamedQuery 按 @OneToMany 对象类型选择

java - 如何更改 JLabel 文本 x 秒

java - 验证输入 - 字符串

java - android studio java 以非零退出值 2 结束

java - Java 定时器 java.util.Timer 的 Python 等价物

java - 添加到表后读取数据返回零

java - JPA 合并与持久化