2013-06-18 45 views
1

我想從休眠配置程序中獲取數據源。下面是我寫的代碼:如何從休眠配置中獲取數據源

public static DataSource getDatasource(Configuration configuration){ 
    ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 
    SessionFactoryImpl session = (SessionFactoryImpl)configuration.buildSessionFactory(registry); 
    DatasourceConnectionProviderImpl provider = (DatasourceConnectionProviderImpl) session.getConnectionProvider(); 
    return provider.getDataSource(); 
} 

但在運行應用程序我有一個例外:

Exception in thread "main" org.hibernate.HibernateException: Missing table: CONTACTS 
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1281) 
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155) 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:508) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769) 
at com.heavenize.Migrations.getDatasource(Migrations.java:30) 
at com.heavenize.Migrations.main(Migrations.java:60) 

我執行一些數據庫遷移和我需要的數據源傳遞給我的遷移工具programmaticaly 。

看來這個問題伴隨着事實buildSessionFactory,因爲hibernate試圖映射實體與數據庫中的表。

財產"hibernate.hbm2ddl.auto"設置爲validate

有沒有更好的方法來獲取數據源?

+0

你是對的,這是由於'hbm2ddl'造成的Hibernate初始化問題,即使沒有你的代碼你也會得到它。閱讀文檔並找到既不創建更新也不驗證ddl的值。 – SJuan76

回答

1

您收到的錯誤與檢索DataSource無關。這是因爲Hibernate正在使用數據庫驗證數據模型,並沒有發現它處於同步處理中。您可以完全刪除hibernate.hbm2ddl.auto屬性,然後將其默認爲none,並且不會有任何驗證。

+0

好的,謝謝。你是對的 – Dimitri

+0

謝謝==接受答案?? – Mubin