如何通过Hibernate API获取数据库表依赖层级?
Hibernate元数据API获取表依赖关系方案
Hibernate提供了元数据API可直接获取表结构及依赖关系,针对你的需求,对应API使用方式如下:
1. 获取数据库包含的所有表
- 通过
Metadata#getDatabase()获取数据库元数据实例 - 调用
Database#getTables()返回所有表的Table对象集合,从中提取表名即可
2. 判断指定表是否为Root Table(不依赖其他表的根表)
- 先通过
Database#getTable(String catalog, String schema, String tableName)获取目标Table对象 - 检查该表的
getForeignKeys()集合:若集合为空,或所有外键均未指向其他表,则为根表
- 也可从实体映射角度验证:获取对应
PersistentClass,遍历其属性,若不存在ManyToOne/OneToOne(非反向关联)类型的属性,说明实体无依赖,对应表为根表
3. 判断指定表是否为Leaf Table(依赖其他表但无其他表依赖它)
获取目标Table对象后,需同时满足两个条件:
- 自身存在依赖:
getForeignKeys()集合中存在指向其他表的外键 - 无其他表依赖:
getReferencingForeignKeys()集合为空(该方法返回所有引用当前表的外键,为空则无其他表依赖)
4. 查询哪些表依赖指定表
获取目标Table对象后,调用getReferencingForeignKeys()获取所有引用该表的外键集合,每个外键通过getTable()方法获取对应的依赖表对象
5. 查询指定表依赖哪些表
获取目标Table对象后,遍历getForeignKeys()集合,每个外键通过getReferencedTable()方法获取被依赖的表对象
内容的提问来源于stack exchange,提问作者ChrLipp
相关产品推荐
相关产品推荐

