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

标签 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());  
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/

相关文章:

java - 如何在 Java 中锁定和解锁 URL

java - 启动 Push-Server-0.12.0-capsule-fat.jar

java - 检查帐户是否已存在时出现空指针异常 - Spring+Thymeleaf

java - 创建jar文件时@Transactional(rollbackfor={null})

java - hibernate validator : Must I use Maven?

java - 每月 hibernate 表

java - 正则表达式获取正斜杠周围的字母字符 block (JAVA)

java - 如何将 Android 应用程序上传到市场?

java - SQLException 从 JTable 和数据库中删除行

java - 你的 SQL 语法有错误 - hibernate 和 mysql