Как читать карту Hibernate - PullRequest
3 голосов
/ 24 марта 2010

Мне нужно знать, какой физический столбец связан с атрибутом персистента.

например.

Класс LDocLine имеет этот атрибут

  private Integer lineNumber;

, который отображается в спящем режиме следующим образом:

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

Мне нужен следующий метод:

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

Я предполагаю, что он существует внутри, но не уверен, что он есть в публичном API.

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 24 марта 2010

У вас есть доступ к 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, поскольку вам придется классифицировать приведение к внутренней реализации: 1010 *

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

В обоих случаях entityName - это имя вашей сущности (имя класса, если оно явно не переопределено)

1 голос
/ 25 марта 2010

Как вы упомянули в своем ответе, у вас нет доступа к объекту «Конфигурация». Если у вас есть доступ к объекту «Сеанс» в спящем режиме, вам может пригодиться следующий код.

 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);
            }

        }

Таким образом вы можете получить подробную информацию о метаданных класса.

0 голосов
/ 24 марта 2010

Это то, для чего обычно не используется Hibernate, так как вам не нужно ссылаться на имена столбцов для получения объектов через HQL или Критерии.

Зачем вам эта функциональность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...