java - 如何在运行时检索 JPA 中实体的映射表名称?

标签 java jpa entity

是否可以确定实体的 native 表名?

如果存在 Table 注释,这很容易:

entityClass.getAnnotation(Table.class).name()

但是如果没有Table注解呢?

Hibernate 通过 Configuration 提供此信息。类:

configuration.getClassMapping(entityClass.getSimpleName()).getTable().getName()

JPA 中有类似的东西吗?

最佳答案

这是我在 EclipseLink 中使用的方法(无映射文件):

/**
 * Returns the table name for a given entity type in the {@link EntityManager}.
 * @param em
 * @param entityClass
 * @return
 */
public static <T> String getTableName(EntityManager em, Class<T> entityClass) {
    /*
     * Check if the specified class is present in the metamodel.
     * Throws IllegalArgumentException if not.
     */
    Metamodel meta = em.getMetamodel();
    EntityType<T> entityType = meta.entity(entityClass);

    //Check whether @Table annotation is present on the class.
    Table t = entityClass.getAnnotation(Table.class);

    String tableName = (t == null)
                        ? entityType.getName().toUpperCase()
                        : t.name();
    return tableName;
}

关于java - 如何在运行时检索 JPA 中实体的映射表名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342075/

相关文章:

java - httpClient:如何检查连接是否已被服务器端关闭

java - Hadoop Mapreduce自定义可写静态上下文

java - 在 HQL 中使用 transient 字段

frameworks - DataSet 不支持 System.Nullable<>

xml - org.xml.sax.SAXParseException : The entity "ndash" was referenced, 但未声明

java - 从对象返回嵌套集合的正确方法是什么?

java - 使用可滚动结果集在 hibernate 中批量读取数据

java - 如何在 Oracle 中使用 JPA 存储日期和时间?

java - JPA2——如何自动删除 `many`一侧的单向多对一映射数据?

symfony - PreUpdate 级联实体持久化 symfony 2.3