List all tables in Hibernate
我想列出数据库中的所有表名。我的应用程序必须独立于DBMS。不同的DBMS具有不同的命令来列出表,例如:
PstgreSQL:
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,并且数据库详细信息将被清晰地抽象为方言。