java - Spring /hibernate : how to get Configuration from LocalContainerEntityManagerFactoryBean

标签 java spring hibernate

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

最佳答案

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

我发现了 Hibernate 的 Integrator ,文档中几乎没有提及。有关它的更多信息可以在链接的 Hibernate JIRA 问题 HHH-5562 中找到。和 HHH-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

关于java - Spring /hibernate : how to get Configuration from LocalContainerEntityManagerFactoryBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252546/

相关文章:

java - Java 中 != 和 == 运算符如何处理整数?

java - 如何用子类修改父类变量并在java中的另一个子类中使用

java - 使用 Jena 获取对类的 OWL 限制

java - Spring 的@Cacheable 注释是否可以与注释方法的 bean 具有相同的范围?

java - MySQL:未知系统变量 'tx_read_only'

Java正则表达式替换重复字符(包括非后续字符)

java - Spring Boot/Spring Security、登录表单、密码检查

spring - 为什么我的 RestTemplate ClientHttpRequestInterceptor 没有被调用?

java - org.hibernate.MappingException : Could not determine type for custom object type

java - 在 Bluemix 中启动应用程序时无法创建 PoolableConnectionFactory 错误