我想從休眠配置程序中獲取數據源。下面是我寫的代碼:如何從休眠配置中獲取數據源
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
。
有沒有更好的方法來獲取數據源?
你是對的,這是由於'hbm2ddl'造成的Hibernate初始化問題,即使沒有你的代碼你也會得到它。閱讀文檔並找到既不創建更新也不驗證ddl的值。 – SJuan76