我想运行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/