如何在运行时通过表名检索JPA中的实体?

时间:2014-02-05 10:07:43

标签: string class jpa entity

是否可以按实体的本机表名称确定实体类名称?

遗留代码的某些部分只有表格的 字符串值 (本例中为CUSM_LANGUAGE),我需要 找到实体类名称 (LanguageEntity)

@Entity
@Table(name = "CUSM_LANGUAGE")
public class LanguageEntity implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    @Column(name = "LANG_DESCRIPTION")
    private String description = null;
    ....

1 个答案:

答案 0 :(得分:3)

我想这很大程度上取决于你正在使用的JPA。

在JPA 2.0中,您有课程:http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManagerFactory.html

此类具有getMetamodel()方法,我希望该方法包含有关数据库的所有信息。

在Metamodel(http://docs.oracle.com/javaee/6/api/javax/persistence/metamodel/Metamodel.html)中,你有getEntities()就是我们得到的:EntityType

我不确定如何从EntityType获取有关它正在使用的表的信息。但即使不是直接可能(我怀疑)你可以按照下面的描述做到这一点。

因为你有遗留代码我希望你有JPA< 2.0没有这个getMetamodel方法。这就是为什么你可以得到关于实体的信息很大程度上取决于你正在使用的特定JPA。

但是如果你有一堆你关心的课程(并且你可以轻松创建这个列表),你可以自己创建索引:

String tableNameOfEntityClass = LanguageEntity.class.getAnnotation(Table.class).name();

因此,您可以将您关注的所有类列出,然后使用键tableName和值引用类创建映射。

当然,如果没有上面描述的Metamodel,它就没有用,因为你也可以用实体类创建就绪映射而不是List。