Как получить список столбцов (по порядку) в таблице базы данных, используя сеанс Hibernate? - PullRequest
1 голос
/ 10 июня 2010

Мне нужно получить список столбцов в таблице в порядке их появления. Возможно ли это с помощью Hibernate? У меня есть объект сеанса Hibernate, и я не против, могу ли я сделать это в самом Hibernate или с помощью JDBC.

База данных - MySQL, и эквивалентная команда SQL, которую я хочу выполнить:

"SHOW COLUMNS FROM " + tableName

Я попробовал следующее, и Hibernate пожаловался:

    Table table = object.getClass().getAnnotation(Table.class);
    String tableName = table.name();
    session.beginTransaction();
    // the following line causes an error
    List columns = session.createSQLQuery("SHOW COLUMNS FROM " + tableName).list();

    session.getTransaction().commit();
    session.close();

Спасибо

- редактировать -

Мой окончательный рабочий код выглядит следующим образом.

/**
 * @param Object object A Hibernate POJO
 */
private ArrayList<String> getColumns(Object object)
{
    Table table = object.getClass().getAnnotation(Table.class);
    String tableName = table.name();
    Session session = this.sessionFactory.openSession();

    Statement statement = null;
    ResultSet resultSet = null;

    ArrayList<String> columns = new ArrayList<String>();
    String columnName;

    Connection connection = session.connection();
    try
    {
        statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        resultSet = statement.executeQuery("SHOW COLUMNS FROM " + tableName);
        while (resultSet.next())
        {
            columnName = resultSet.getString("field");
            columns.add(columnName);
        }
    }
    catch (SQLException ex)
    {
        this.logger.fatal("getColumns: Unable to get column names", ex);
        System.exit(1);
    }
    finally
    {
        session.close();
    }

    return columns;
}

1 Ответ

0 голосов
/ 10 июня 2010

Мне нужно получить список столбцов в таблице в порядке их появления.Возможно ли это с помощью Hibernate?

Hibernate на самом деле не предназначен для такой необходимости.

У меня есть объект сеанса Hibernate, и я не противЯ могу сделать это в самом Hibernate, или используя JDBC.

Это хорошо, потому что я думаю, что вам придется использовать сырой JDBC здесь.Поэтому получите базовое соединение JDBC из сеанса и либо используйте DatabaseMetaData, либо выполните свой пользовательский запрос.

Connection conn = session.connection();
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...