休眠:通过从某个位置读取hbm映射文件来动态创建表

时间:2019-06-07 09:46:14

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

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

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

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

REST api。

休眠如何动态读取hbm文件来创建表?

2 个答案:

答案 0 :(得分:0)

嗨,这将是一个两步过程。

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

    hibernate.hbm2ddl.auto

在同一配置文件中,您需要引用传入的文件。您可以做一些模板魔术,也可以添加传入的程序化代码。您需要检查一下。您可以自己检查如何做得最好,我相信休眠4可以通过编程方式完成。

  1. 第二步是使用休眠动态模型http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#persistent-classes-dynamicmodels 这是因为在运行时您将没有实体的实现。

答案 1 :(得分:0)

动态加载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();
    }

}

希望这会有所帮助:)