从Hibernate中的模型中获取表名

Can*_*der 30 java hibernate

如何在Hibernate中获取模型的表名?

显然以前有一种getTableName()方法ClassMetadata,但它已被删除.

有一种getClassMapping(String entityName)方法Configuration,但我不知道如何(或者如果我应该)在我的DAO实现中使用Configuration.

我的DAO实现是HibernateGeneralGenericDao的子类.

更新:事实证明,如果没有表名,我可以做我想做的事情.但是,为了便于参考,我将保持问题公开(并在他们来时尝试答案).

Fox*_*BOA 35

它有点奇怪,但它的工作原理:

ClassMetadata hibernateMetadata = sessionFactory.getClassMetadata(pClassName);

if (hibernateMetadata == null)
{
    return;
}

if (hibernateMetadata instanceof AbstractEntityPersister)
{
     AbstractEntityPersister persister = (AbstractEntityPersister) hibernateMetadata;
     String tableName = persister.getTableName();
     String[] columnNames = persister.getKeyColumnNames();
}
Run Code Online (Sandbox Code Playgroud)

  • `getClassMetadata` 已弃用 (3认同)
  • 在第五行末尾附近有一个额外的括号。有足够声誉的人应该修复它。另外,请参阅并考虑 https://meta.stackoverflow.com/questions/251580/what-is-the-reason-behind-the-6-character-minimum-for-suggested-edits 和 https://meta。 stackoverflow.com/questions/277184/why-is-it-necessary-for-me-to-write-6-character-if-just-one-is-missing-and-what (2认同)

Ale*_*ell 22

如果您正在使用表格注释,您可以执行以下操作:

Table table = Entity.class.getAnnotation(Table.class);
String tableName = table.name();
Run Code Online (Sandbox Code Playgroud)

  • 相当确定这只适用于在每个实体上设置表注释的情况.如果不这样做,Hibernate可以很好地工作(它从实体名称派生名称) (10认同)