Java 冬眠。如何从ResultSetMetaData创建空表?

Java 冬眠。如何从ResultSetMetaData创建空表?,java,hibernate,Java,Hibernate,我有一个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()); S

我有一个
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中的所有字段创建一个新的空表

  • 在其他数据库中打开新连接
  • 使用上面的元数据
  • 使用此元数据创建一个新的空表
  • 我可以看到两种可能的解决办法

  • 反思。通常,要使用Hibernate创建表,我需要创建一个
    bean
    。但是我事先不知道
    ResultSetMetaData
    将包含哪些字段。我应该用反射创建这个
    bean
  • HQL创建表。这可能吗
    最简单的方法是什么?我该怎么做呢?

    我认为您不需要为它创建bean。若您想要创建具有相同字段的新表,那个么使用hibernate或jdbc在数据库上简单地触发这个查询

    SHOW CREATE TABLE tablename
    
    现在只需在查询中更改表的名称,就可以在Java中轻松完成

    现在您不需要为新创建的表创建任何bean。 在hibernate中,有两种从表中获取数据的方法。第一种方法是以bean对象的形式获取表数据,另一种方法是激发sql查询并以对象(Java类)的形式获取数据。您可以使用hibernate以对象和对象数组的形式获取数据

    当我们在hibernate中使用联接查询时,并没有特定类型的bean可用于处理联接结果,因为它包含来自多个表的列,所以您将以对象和对象数组的形式获取数据

    只需以对象或对象数组的形式获取数据

    检查我的github的此链接。。。不完全是您想要的,但仍然会有帮助:


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

  • SchemaExport
    -迭代显示API类的ResultSetMetaData并获取所需信息
    使用此信息创建hibernate映射XML并将其发送到

  • 本机查询
    -像往常一样迭代您的元数据,以确定列应该是什么。
    使用或甚至使用createNativeQuery

    session.createSQLQuery("create table .....").executeUpdate();
    
  • 这将解释如何创建自定义字段。您可以将其DOM解析器用于第1种方法,或者只创建表,并使用本博客中提到的方法创建自定义字段。(请参阅此类映射管理器及其相关的自定义映射配置)


  • 最后,需要为此配置2个不同的数据源。并注入第二个数据库的源代码,以便在上述实现中创建会话/会话工厂。

    谢谢+1。我希望有一个更简单、更简洁的解决方案。创建类映射器似乎比反射更难“本机查询”不是选项。谢谢+1。但是我需要使用ResultSetMetaData。“显示创建表”仅适用于表。我有一个查询,而不是一个表
    // yourClassMapper.xml generated in runtime
    Configuration config = new Configuration();
    config.addResource("yourClassMapper.xml");  
    
    new SchemaExport(config).create(true,true) 
    
    session.createSQLQuery("create table .....").executeUpdate();