繁体   English   中英

如何阅读Hibernate映射

[英]How to read Hibernate mapping

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

例如

类LDocLine具有此属性

  private Integer lineNumber;

它在hibernate中映射如下:

  <property name="lineNumber" column="LINENUMBER" type="integer"/>

我需要的方法是这样的:

getColumn(“LDocLine”,“lineNumber)=>”LINENUMBER“

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

提前致谢

您是否可以访问用于构建会话工厂的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
}

文档。

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

AbstractEntityPersister persister = (AbstractEntityPersister) sessionFactory.getClassMetadata(entityName);
String[] columnNames = persister.getPropertyColumnNames(propertyName);

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

正如您在回复中提到的,您无法访问“配置”对象。如果您有权访问hibernate“Session”对象,则以下代码可能对您有所帮助。

 Collection clsMetaData = session.getSessionFactory()
                .getAllClassMetadata().values();
        for (Iterator i = clsMetaData.iterator(); i.hasNext();) {
            ClassMetadata cmd = (ClassMetadata) i.next();
            System.out.println("cmd" + cmd.getEntityName());
            for (String s : cmd.getPropertyNames()) {
                System.out.println("prop:" + s);
            }

        }

这样您就可以获得有关类元数据信息的详细信息。

这是Hibernate通常不使用的东西,因为您不需要引用列名来通过HQL或Criteria来检索对象。

你为什么需要这个功能?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM