冬眠本身
尝试
自动检测方言
Configuration.buildSessioNFactory()
打电话-通常,尽管不总是成功。
然而,Spring代码没有——这就是您得到异常的地方。
LocalSessionFactoryBean.updateDatabaseSchema()
方法使用
Dialect.getDialect()
获取方法
Dialect
需要显式设置方言的实例。
我不太清楚为什么会这样做,尽管我怀疑这是一种预防措施,防止Hibernate错误地检测到你的方言,并因此弄乱你的数据库(因为更新模式可能是灾难性的)。
您的选择是:
-
显式指定方言
-
设置
schemaUpdate
假
-
扩展localsessionfactorybean并重写
updateDatabaseSchema()
方法从会话工厂实例获取(已自动检测)方言。
您必须将其类强制转换为sessionfactoryimplementor:
public void updateDatabaseSchema() throws DataAccessException {
final Dialect dialect = ((SessionFactoryImplementor) getSessionFactory()).getDialect();
...
hibernateTemplate.execute(new HibernateCallback() {
...
// you already have the dialect so you don't need to get it using this:
// Dialect dialect = Dialect.getDialect(getConfiguration().getProperties());
...
);
}