Spring / Hibernate:如何从LocalContainerEntityManagerFactoryBean获取配置

时间:2014-12-02 15:06:11

标签: java spring hibernate

我想要Configuration.generateSchemaUpdateScriptList()。但是,使用LocalContainerEntityManagerFactoryBean配置Hibernate。如何从Configuration实例访问LocalContainerEntityManagerFactoryBean对象?或者有更好的方法来实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

好的,这是一场为期两天的比赛,主打马拉松比赛,但最终我找到了一个解决方案,虽然它有些笨拙。

我浏览了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