2013-10-25 49 views
3

在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提供的驅動程序之間的不兼容?

一直撕下我的頭髮。任何幫助非常感謝!

回答

4

是的。問題似乎是,我試圖混合不同版本的各種hibernate依賴項。我剛剛將上面引用的pom.xml部分替換爲:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-search</artifactId> 
     <version>4.3.0.Final</version> 
    </dependency> 

而且我正在談論下一個問題!

+0

請註明你的問題已經解決了。謝謝! – ALOToverflow

相關問題