关于sql:列出Hibernate中的所有表

List all tables in Hibernate

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

PstgreSQL:

SELECT * FROM pg_catalog.pg_table s

MySQL:

1
SHOW TABLES

Oracle:

1
2
3
SELECT DISTINCT OBJECT_NAME
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'

我认为我应该使用hibernate模式,因为为所有DBMS编写不同的SQL查询是不舒服的。
网络中有一些示例,其中列出了如何在hibernate状态下列出表,但是我发现的所有示例仅列出了映射的实体。我想列出所有表名称,而与hibernate实体无关。


这篇文章解释了如何使用JDBC驱动程序来实现,这是IMHO的一种比使用hibernate模式更好的方法。我还将在此处发布代码,以供参考

1
2
3
4
5
6
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
}


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

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

但是您可以为目标数据库编写自己的方言。因此,您的应用程序中将具有跨数据库* QL,并且数据库详细信息将被清晰地抽象为方言。