如何在运行时检索JPA中实体的映射表名?
是否可以确定实体的本机表名?
如果存在注释,则很容易:Table
entityClass.getAnnotation(Table.class).name()
但是,如果没有注释呢?Table
休眠通过配置
类提供以下信息:
configuration.getClassMapping(entityClass.getSimpleName()).getTable().getName()
JPA中是否有类似的东西?
是否可以确定实体的本机表名?
如果存在注释,则很容易:Table
entityClass.getAnnotation(Table.class).name()
但是,如果没有注释呢?Table
休眠通过配置
类提供以下信息:
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;
}
如果不存在表注释(也没有 ORM.xml),则在 JPA 中,表名是根据类名形成的(参见 JPA 规范)。因此,为什么你究竟需要一个访问器方法?
查看 http://www.datanucleus.org/products/accessplatform_2_0/jpa/orm/datastore_identifiers.html