【问题标题】:Hibernate: Dynamic table creation by reading hbm mapping files from a locationHibernate:通过从某个位置读取 hbm 映射文件来创建动态表
【发布时间】:2019-06-07 09:46:14
【问题描述】:

如何从hbm文件动态创建表?

我的产品有多个客户。添加新客户端时,客户端将提供hbm 映射文件来存储数据。 (每个客户端都有不同的数据和表格)。

在添加新客户端时,将使用 hbm 文件位置调用 REST api。

hibernate如何通过动态读取hbm文件来创建表?

【问题讨论】:

    标签: java spring hibernate spring-boot spring-data-jpa


    【解决方案1】:

    您好,这将是一个两步过程。

    1. 您需要在运行时创建Hibernate Session Factory,以便在收到hbm 文件后强制hibernate 创建表。您可以在配置中使用以下属性来执行此操作:

      hibernate.hbm2ddl.auto

    在同一个配置文件中你需要引用传入的文件。您可以做一些模板魔术,或者您也可以添加传入的程序化。你需要检查一下。您可以自己检查如何做到最好,我相信在 hibernate 4 中您可以通过编程方式做到这一点。

    1. 第二步是使用 Hibernate Dynamic Models http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#persistent-classes-dynamicmodels 这是因为您不会在运行时实现实体。

    【讨论】:

      【解决方案2】:

      动态加载hbm文件的示例代码:

      public class LoadHBMFile {
      
          private static final SessionFactory session = createSession();
      
          private static SessionFactory createSession() {
              try {
      
                  SessionFactory sessionFactory = new Configuration()
                          .configure("hibernate.cfg.xml")
                          .addResource("{full path}/demo.hbm.xml")
                          .buildSessionFactory();
      
                  return sessionFactory;
      
              } catch (Throwable ex) {
                  System.out.println("Failed" + ex);
              }
          }
      
          /* To get the sessionfactory */
          public static SessionFactory getSession() {
              return session;
          }
      
          /* To close the sessionfactory */
          public static void shutdown() {
              getSession().close();
          }
      
      }
      

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        • 1970-01-01
        相关资源
        最近更新 更多