You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hibernate 5.4.12时遭遇java.lang.ClassCastException错误求助

问题排查与解决方案

我帮你梳理了这个ClassCastException的根源,主要是XML配置文件语法错误引发的解析异常,再加上代码初始化顺序和数据库连接参数的小问题,具体修复步骤如下:

1. 修复Hibernate配置文件的语法错误

你的hibernate.cfg.xml里有一行明显的语法错误,直接导致了XML解析器的异常:
原错误代码:

<property name="hbm2ddl.auto",environment="hibernate.dialect")>update</property>

这行里多余的逗号和括号完全不符合XML标签的语法规范,把它改成正常的属性标签:

<property name="hbm2ddl.auto">update</property>

另外,你的数据库连接URL里useSSL参数没有指定值,这会导致JDBC连接警告甚至失败,补充上值(本地开发推荐设为false):

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/fortune?verifyServerCertificate=false&amp;useSSL=false</property>

2. 调整Hibernate初始化代码的顺序

原代码中先构建ServiceRegistry再加载配置文件,这会导致配置文件里的属性根本没被读取到Configuration对象中,正确的顺序应该是先加载配置,再构建注册表:
修正后的App类代码:

public class App {
    public static void main( String[] args ) {
        Model model=new Model();
        model.setId(102);
        model.setName("Alien");
        model.setColor("Green");
        
        Configuration con = new Configuration();
        // 先加载配置文件和实体类
        con.configure().addAnnotatedClass(Model.class);
        // 基于加载好的配置构建ServiceRegistry
        ServiceRegistry sg = new StandardServiceRegistryBuilder()
                .applySettings(con.getProperties())
                .build();
        
        SessionFactory sf = con.buildSessionFactory(sg);
        Session ss = sf.openSession();
        Transaction tns = ss.beginTransaction();
        ss.save(model);
        tns.commit();
        ss.close();
        sf.close();
    }
}

3. 可选:适配MySQL版本的配置优化

如果你的MySQL版本是8.0及以上,记得更新驱动类和方言,避免兼容性问题:

  • 驱动类从com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver
  • 方言从org.hibernate.dialect.MySQLDialect改为org.hibernate.dialect.MySQL8Dialect

错误原因说明

当XML配置文件存在语法错误时,Hibernate依赖的JAXB解析器在处理畸形的XML结构时,会生成不符合预期的StAX事件,进而触发EntityReferenceEvent转Characters的类型转换异常。只要修复好XML的语法问题,这个异常就会自动消失。

内容的提问来源于stack exchange,提问作者Thar Lin Htet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:07:29