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中的所有字段创建一个新的空表
bean
。但是我事先不知道ResultSetMetaData
将包含哪些字段。我应该用反射创建这个bean
李>
最简单的方法是什么?我该怎么做呢?我认为您不需要为它创建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();
最后,需要为此配置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();