列出Hibernate中的所有表

时间:2014-11-26 08:56:27

标签: sql hibernate

我想列出数据库中的所有表名。我的应用程序必须独立于DBMS。不同的DBMS具有不同的列表表命令,例如:

PstgreSQL:

SELECT * FROM pg_catalog.pg_tableŠ

MySQL的:

show tables

甲骨文:

SELECT DISTINCT OBJECT_NAME 
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'

我认为我应该使用hibernate,因为为所有DBMS编写不同的SQL查询是不舒服的。 网络中有一些示例如何在hibernate中列出表,但我找到的所有示例列表只映射了权限。我想列出所有表名,而不管hibernate实体。

2 个答案:

答案 0 :(得分:3)

This post解释了如何使用JDBC驱动程序来实现它,这是一个更好的方法,然后使用hibernate。我也会在这里发布代码,供参考

Connection conn = DriverManager.getConnection("", "", "");
DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
    System.out.println(rs.getString(3)); // 3rd column is table name
}

答案 1 :(得分:0)

Hibernate跨平台生成HQL / JPQL查询和表达式的方式是使用dialects。每个受支持的数据库都有一个方言。

据我所知,列表不是这些方言的一部分,因此你想要的很可能是不可能的OOTB。

可以为目标数据库编写自己的方言。因此,您的应用程序中将有一个跨数据库* QL,并且数据库细节将被干净地抽象为方言。