栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Spring Data JPA中,有没有最简单的方法来获取表元数据(列名列表)信息?我可以在通用数据库上使用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Spring Data JPA中,有没有最简单的方法来获取表元数据(列名列表)信息?我可以在通用数据库上使用

JPA规范包含metamodel
API,该API使您可以查询有关托管类型及其托管字段的信息。但是,它不涵盖基础数据库。因此,JPA中没有任何现成的查询数据库元数据。


每个RDBMS存储元信息的方式也不同,因此不可能有一个简单的,与数据库无关的解决方案。


但是,您可以通过几步来实现您想要的。

步骤1 :定义一个实体类,该实体类将保存元数据信息。

@Entity@IdClass(TablemetadataKey.class)@Table(name = "table_metadata")class Tablemetadata {  @Column(name = "column_name")  @Id  String columnName;  @Column(name = "table_name")  @Id  String tableName;  public static class TablemetadataKey implements Serializable {    String columnName;    String tableName;  }}

步骤2 :为实体添加存储库。

public interface TablemetadataRepository extends JpaRepository<Tablemetadata, TablemetadataKey>{  Tablemetadata findByTableName(String tableName);}

步骤3
:定义一个名为

table_metadata
要映射到实体类的数据库视图。这必须使用特定于数据库的查询来定义(因为每个数据库都有不同的存储元数据的方式)。

可以在此步骤上执行特定于数据库的优化,例如与Oracle一起使用实例化视图以加快访问速度等。

或者,

table_metadata
可以使用所需的列创建名为的表,并使用SQL脚本定期填充。

现在,应用程序可以完全访问所需的元数据。

List<Tablemetadata> metadata = tablemetadataRepository.findAll()Tablemetadata metadata = tablemetadataRepository.findByTableName("myTable");

要注意的一个问题是,并非架构中的所有表都可以映射为JPA实体,或者并非所有表中的所有列都可以映射为实体字段。因此,直接查询数据库元数据可能会导致结果与实体类和字段不匹配。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号