2014-12-02 83 views
1

我想運行Configuration.generateSchemaUpdateScriptList()。然而,Hibernate使用LocalContainerEntityManagerFactoryBean進行配置。如何從LocalContainerEntityManagerFactoryBean實例訪問Configuration對象?還是有更好的方法來實現這一目標?Spring/Hibernate:如何從LocalContainerEntityManagerFactoryBean獲取配置

+0

爲什麼你需要運行'Configuration.generateSchemaUpdateScriptList()' ? – 2014-12-02 19:11:45

+0

很明顯,因爲我想獲得Hibernate關於如何更新模式以匹配實體的想法,但是對它做了其他事情,而不是按照原樣應用它。 – 2014-12-04 11:38:50

回答

2

好吧,這是一場爲期兩天的比賽,還是頭馬拉松比賽,但最終我找到了一個解決方案,儘管它有點冒險。

我在Hibernate的Integrator中進行了攝像,這在文檔中很少提及。關於它的更多信息可以在鏈接的Hibernate JIRA問題HHH-5562HHH-6081中找到。但是,只要知道關鍵字,就可以將來自a few sources的工作示例的足夠信息拼湊在一起。儘管如此,它在彈簧方面表現不佳,這是在SO question中提到的一個問題。

所以,最終的解決方案是一個有點hackish,但它的工作原理:

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 
相關問題