我正在开发一个网络应用程序。我们在项目中使用 Hibernate 作为 ORM。实际上,我们的应用程序会根据用户选择动态创建一些表。用户可以选择表名、列名,然后他/她可以从 csv 文件导入数据。所以我的问题是:如何将这个动态创建的表映射到 Hibernate 和 Java 对象?
最佳答案
可以动态完成,但是有点乱:
在构建 SessionFactory 之前,您需要动态更改 Hibernate 的 Configuration 对象。如果您使用的是 Spring,这可以通过覆盖 AnnotationSessionFactoryBean
的 postProcessAnnotationConfiguration()
方法来完成;否则你只需要在调用 buildSessionFactory()
之前使用你的 Configuration 对象来完成它。
如果您需要在不重启应用程序的情况下执行此操作,您正在考虑重建您的 SessionFactory(这意味着您的用户将不得不等到完成)或使用专门用于您的自定义类的单独 SessionFactory 实例(这是如果您的自定义类需要引用您的内置类,那几乎是不可能的)。
您可以通过 configuration.getMappings()
访问类/表映射。然后您需要通过 Table API 创建一个新的表映射并通过 addTable()
将其添加到配置中。 PersistentClass 也必须做同样的事情它代表一个类映射。如果您使用同一个类来表示多个实体(例如映射多个表),请确保为每个实体使用唯一的实体名称。您必须在每次重新启动应用程序时执行此操作(更改配置)。
关于java - 如何在 Hibernate 中映射动态创建的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1507758/