В 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 at 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)) возвращает ложь.
Это может быть какая-то несовместимость между версиями hibernate и драйверами, предоставляемыми Postgresql?
Отрывал мои волосы. Любая помощь очень ценится!
Пожалуйста, отметьте ваш вопрос решен. Благодаря! – ALOToverflow