gpt4 book ai didi

java - hibernate 。如何从 ResultSetMetaData 创建一个空表?

转载 作者:行者123 更新时间:2023-11-30 06:50:07 25 4
gpt4 key购买 nike

我有一个 ResultSetMetaData 对象。

PreparedStatement ps=con.prepareStatement("select var1, var2 from test1, test2");  
ResultSet rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();

System.out.println("Total columns: "+rsmd.getColumnCount());
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(1));

我需要创建一个新的空表,其中包含上述 ResultSetMetaData 中的所有字段

  1. 在不同的数据库中打开一个新连接
  2. 使用上面的元数据
  3. 用这个元数据创建一个新空表

我可以看到两种可能的解决方案

  1. 反射(reflection)。一般来说,要使用 Hibernate 创建一个表,我需要创建一个 bean。但我事先并不知道 ResultSetMetaData 将包含哪些字段。我应该用反射创建这个 bean 吗?
  2. HQL 创建表。这可能吗?

最简单的方法是什么?我该怎么做?

最佳答案

我能想到的几个解决方案:

  1. SchemaExport - 遍历您的 ResultSetMetaData,它公开 API,例如 getColumnNamegetColumnType获取您需要的信息。
    使用此信息创建 hibernate 映射 XML 并将其发送到 SchemaExport.create .

    // yourClassMapper.xml generated in runtime
    Configuration config = new Configuration();
    config.addResource("yourClassMapper.xml");

    new SchemaExport(config).create(true,true)
  2. native 查询 - 像往常一样遍历您的元数据以确定列应该是什么。
    使用 createSQLQuery甚至使用 createNativeQuery

    session.createSQLQuery("create table .....").executeUpdate();
  3. link提供有关如何创建自定义字段的说明。您可以将其 DOM 解析器用于第一种方法,或者只创建表并使用本博客中提到的方法来创建自定义字段。 (引用该类MappingManager及其相关的自定义 map 配置)

最后,您需要为此配置 2 个不同的数据源。并在上述实现中注入(inject)第二个数据库的源以创建 session / session 工厂。

关于java - hibernate 。如何从 ResultSetMetaData 创建一个空表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41734719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com