我需要按照它们出现的顺序检索表中列的列表。这可能使用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;
}
答案 0 :(得分:0)
我需要按照它们出现的顺序检索表中列的列表。这可能是使用Hibernate吗?
Hibernate并不是真正满足这种需求。
我有一个Hibernate会话对象,我不介意我是可以在Hibernate本身,还是使用JDBC。
这很好,因为我认为你必须在这里使用原始JDBC。因此,从会话中获取基础JDBC连接,并使用DatabaseMetaData
或执行自定义查询。
Connection conn = session.connection();
...