【问题标题】:Spring / Hibernate: how to get Configuration from LocalContainerEntityManagerFactoryBeanSpring / Hibernate:如何从 LocalContainerEntityManagerFactoryBean 获取配置
【发布时间】:2014-12-02 15:06:10
【问题描述】:

我想运行Configuration.generateSchemaUpdateScriptList()。然而,Hibernate 是使用LocalContainerEntityManagerFactoryBean 配置的。如何从LocalContainerEntityManagerFactoryBean 实例访问Configuration 对象?还是有更好的方法来实现这一点?

【问题讨论】:

  • 为什么需要运行Configuration.generateSchemaUpdateScriptList()
  • 显然是因为我想了解 Hibernate 关于如何更新架构以匹配实体的想法,但是用它做其他事情而不是按原样应用它。

标签: java spring hibernate


【解决方案1】:

好的,这是一场为期两天的墙对头马拉松比赛,但最后我找到了解决方案,尽管它有点 hacky。

我偶然发现了 Hibernate 的 Integrator,文档中几乎没有提到它。有关它的更多信息可以在链接的 Hibernate JIRA 问题HHH-5562HHH-6081 中找到。但是,一旦您知道关键字,就可以从a few sources 拼凑出足够的信息来作为一个工作示例。仍然不能很好地与 Spring 配合使用,这是 SO question 中提到的一个问题。

所以,最终的解决方案有点老套,但它确实有效:

public class GetConfigIntegrator implements Integrator {

    private static Configuration configuration;

    public static Configuration getConfiguration() {
        return configuration;
    }

    @Override
    public void integrate(Configuration configuration, /* ... */) {
        GetConfigIntegrator.configuration = configuration;
    }

    // Empty Integrator implementation...
}

可以看出,这个愚蠢的积分器只是将配置存储在一个静态变量中,以便以后可以访问它。不理想,但面临没有选择的人很高兴找到这样的路径。

要注册集成器,需要创建以下文件,每个集成器类(全名)一行,如下所示:

# src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator:
<full package name>.GetConfigIntegrator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多