Java 如何在Hibernate中映射动态创建的表?

Java 如何在Hibernate中映射动态创建的表?,java,hibernate,Java,Hibernate,我正在开发一个web应用程序。我们在项目中使用Hibernate作为ORM。实际上,我们的应用程序根据用户选择动态创建一些表。用户可以选择表名、列名,然后从csv文件导入数据。所以我的问题是:如何用Hibernate和Java对象映射这个动态创建的表?有多少表是动态创建的?表是否相似,而您只需更改数据库名称 以下是更改表名的讨论: 如果您正在完全构建一个新表,您是否可以使用一个视图,并直接将用户引导到一个视图 为什么要使用Hibernate来实现这一点,而不仅仅是在JDBC中动态创建查询?这可

我正在开发一个web应用程序。我们在项目中使用Hibernate作为ORM。实际上,我们的应用程序根据用户选择动态创建一些表。用户可以选择表名、列名,然后从csv文件导入数据。所以我的问题是:如何用Hibernate和Java对象映射这个动态创建的表?

有多少表是动态创建的?表是否相似,而您只需更改数据库名称

以下是更改表名的讨论:

如果您正在完全构建一个新表,您是否可以使用一个视图,并直接将用户引导到一个视图


为什么要使用Hibernate来实现这一点,而不仅仅是在JDBC中动态创建查询?

这可以动态完成,但有点混乱:

在构建SessionFactory之前,您需要动态更改Hibernate的配置对象。如果您使用的是Spring,那么可以通过重写
AnnotationSessionFactoryBean
postProcessAnnotationConfiguration()
方法来实现;否则,在调用
buildSessionFactory()
之前,只需使用配置对象即可

如果您需要在不重新启动应用程序的情况下执行此操作,您可以考虑重建SessionFactory(这意味着您的用户将不得不等待,直到完成),或者使用专门用于自定义类的单独SessionFactory实例(如果自定义类需要引用内置类,这几乎是不可能的)


您可以通过
configuration.getMappings()
访问类/表映射。然后,您需要通过创建一个新的表映射,并通过
addTable()
将其添加到配置中。必须对表示类映射的对象执行相同的操作。如果您使用同一个类来表示多个实体(例如,映射多个表)确保每个表使用唯一的实体名称。每次重新启动应用程序时都必须这样做(更改配置)。

数据库解决方案-您可以创建一个视图并将其指向一个或另一个表(假设结构相同)

创建视图休眠名称 作为 从表A中选择*

或 创建视图休眠名称 作为 从表B中选择*

您需要应用程序执行本机SQL(DDL), 然而,这应该比Hibernate黑客更容易