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

标签 java hibernate

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

最佳答案

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

在构建 SessionFactory 之前,您需要动态更改 Hibernate 的 Configuration 对象。如果您使用的是 Spring,这可以通过覆盖 AnnotationSessionFactoryBeanpostProcessAnnotationConfiguration() 方法来完成;否则你只需要在调用 buildSessionFactory() 之前使用你的 Configuration 对象来完成它。

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

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

关于java - 如何在 Hibernate 中映射动态创建的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1507758/

相关文章:

java - 使用 java 将 SCORM 类(class)导入数据库中的 LMS 软件

java - Java正则表达式中的空格

java - 是否可以在 jsp 中根据条件设置页面内容类型或为单个 jsp 设置不同的内容类型

java - 二维矩阵的DCT和IDCT在Java中的实现

java - GridBagLayout 网格化不起作用

java - JPA(Hibernate)中注释字段和方法之间的区别?

java - hibernate 错误 : java.sql.SQLException: Access denied for user 'root ' @'localhost' (using password: YES)

java - 为什么 Hibernate 允许我在外键约束上插入空值?

hibernate - Grails GORM : DuplicateKeyException on merge

hibernate - Grails GORM-使用聚合函数时如何获取PagedResultList