gpt4 book ai didi

hibernate - 为什么 org.hibernate.dialect.PostgreSQLDialect 不能转换为 org.hibernate.dialect.Dialect?

转载 作者:行者123 更新时间:2023-12-02 21:12:03 29 4
gpt4 key购买 nike

在 hibernate.xml 中,我有:

<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();
}

这一切看起来非常简单,但我得到:

Caused by: java.lang.ClassCastException: org.hibernate.dialect.PostgreSQLDialect cannot be cast to 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 );
}
}

尝试在此处实例化 Dialog 会导致上述 ClassCastException。

为了额外确保我拥有正确的类,我在其层次结构中显示了所有父类(super class)...这正是我在控制台中看到的内容:

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。

这可能是 hibernate 版本与 Postgresql 提供的驱动程序之间存在某种不兼容吗?

一直在撕扯我的头发。非常感谢任何帮助!

最佳答案

是的。问题似乎是我试图混合各种 hibernate 依赖项的不兼容版本。我刚刚将上面引用的 pom.xml 部分替换为:

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

我要开始下一期了!

关于hibernate - 为什么 org.hibernate.dialect.PostgreSQLDialect 不能转换为 org.hibernate.dialect.Dialect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19601089/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com