如何阅读Hibernate映射

Llu*_*nez 3 java hibernate

我需要知道哪个物理列与持久性属性相关联.

例如

类LDocLine具有此属性

  private Integer lineNumber;
Run Code Online (Sandbox Code Playgroud)

它在hibernate中映射如下:

  <property name="lineNumber" column="LINENUMBER" type="integer"/>
Run Code Online (Sandbox Code Playgroud)

我需要的方法是这样的:

getColumn("LDocLine","lineNumber)=>"LINENUMBER"

我假设它在内部存在,但不确定它是否在公共API中.

提前致谢

Chs*_*y76 5

您是否可以访问Configuration用于构建会话工厂的对象?如果是这样,您可以使用以下内容:

Value v = configuration.getClassMapping(entityName).getProperty(propertyName).getValue();
for (Iterator it = v.getColumnIterator(); it.hasNext(); ) {
  Column column = (Column) it.next();
  column.getName(); // or .getQuotedName() or bunch of other useful stuff
}
Run Code Online (Sandbox Code Playgroud)

文档.

如果您无权访问配置,则可以从SessionFactory实例获取列数据,但是在这种情况下,您在技术上不再使用公共API,因为您必须将类转换为内部实现:

AbstractEntityPersister persister = (AbstractEntityPersister) sessionFactory.getClassMetadata(entityName);
String[] columnNames = persister.getPropertyColumnNames(propertyName);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下entityName都是您的实体的名称(除非明确覆盖,否则为其类名)