在hibernate.xml,我有:爲什麼org.hibernate.dialect.PostgreSQLDialect無法轉換爲org.hibernate.dialect.Dialect?
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
,這裏是我想要做的事:
final Session sess = sessionFactory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
Collection<Rfc> rfcs;
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Rfc.class);
criteria = criteria.add(Restrictions.like(Rfc.RFC_IDENTIFIER, input.replace('*', '%')));
rfcs = criteria.list();
// ...
tx.commit();
} catch (final Exception e) {
if (tx != null) {
tx.rollback();
}
throw new IllegalArgumentException(e);
} finally {
sess.close();
}
這一切似乎很簡單,但我越來越:
引起:java.lang.ClassCastException:org.hibernate.dialect.PostgreSQLDialect無法轉換爲org.hibernate.dialect.Dialect 位於org.hibernate.service.jdbc.dialect.internal。
這裏是我的pom.xml的相關位:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<!-- <version>4.1.9.Final</version>-->
<version>4.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
我追蹤的問題org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.constructDialect的方法( ),其中我們發現:
private Dialect constructDialect(String dialectName) {
try {
return (Dialect) classLoaderService.classForName(dialectName).newInstance();
}
catch (ClassLoadingException e) {
throw new HibernateException("Dialect class not found: " + dialectName, e);
}
catch (HibernateException e) {
throw e;
}
catch (Exception e) {
throw new HibernateException("Could not instantiate dialect class", e);
}
}
試圖在這裏實例化一個對話框導致上述ClassCastException異常。
只是要額外確保我有合適的班級,我顯示在其層次結構中所有超...這正是我在控制檯中看到:
類org.hibernate.dialect.PostgreSQLDialect
類org.hibernate.dialect.PostgreSQL82Dialect
類org.hibernate.dialect.PostgreSQL81Dialect
類的org.hibernate.dialect.Dialect
可是...果然, org.hibernate.dialect.Dialect.class.isAssignableFrom(classLoaderService.classForName(dialectName)) 返回false。
這可能是某種休眠版本和Postgresql提供的驅動程序之間的不兼容?
一直撕下我的頭髮。任何幫助非常感謝!
請註明你的問題已經解決了。謝謝! – ALOToverflow