如何使用Hibernate会话获取数据库表中的列(按顺序)列表?

时间:2010-06-10 15:12:14

标签: mysql hibernate

我需要按照它们出现的顺序检索表中列的列表。这可能使用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 :(得分:0)

  

我需要按照它们出现的顺序检索表中列的列表。这可能是使用Hibernate吗?

Hibernate并不是真正满足这种需求。

  

我有一个Hibernate会话对象,我不介意我是可以在Hibernate本身,还是使用JDBC。

这很好,因为我认为你必须在这里使用原始JDBC。因此,从会话中获取基础JDBC连接,并使用DatabaseMetaData或执行自定义查询。

Connection conn = session.connection();
...