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

如何使用Hibernate获取数据库全表数据?遇antlr类缺失错误

解决Hibernate CriteriaQuery查询时的antlr/RecognitionException缺失错误

这个java.lang.NoClassDefFoundError问题本质是你使用的ANTLR版本完全不兼容Hibernate的Criteria API导致的——你当前用的3.0ea8是非常早期的预览版,稳定性和兼容性都极差,根本不适合搭配Hibernate使用。下面是具体的解决步骤:

1. 替换为兼容的ANTLR稳定版本

直接移除你当前的ANTLR依赖,换成Hibernate官方适配的稳定版本。对于绝大多数Hibernate 5.x及以上版本,推荐使用2.7.7版本(这是Hibernate解析查询语句时依赖的标准稳定版)。更新后的POM配置如下:

<!-- 替换为Hibernate兼容的ANTLR稳定版本 -->
<dependency>
    <groupId>antlr</groupId>
    <artifactId>antlr</artifactId>
    <version>2.7.7</version>
    <scope>runtime</scope>
</dependency>

2. 排查并解决依赖冲突

有时候项目中其他第三方依赖会偷偷引入不同版本的ANTLR,导致类加载时出现冲突。你可以通过Maven命令生成依赖树,找出冲突来源:

mvn dependency:tree

如果发现有其他依赖引入了不兼容的ANTLR版本,在对应的依赖节点中添加排除配置,比如:

<dependency>
    <!-- 这里是引发冲突的第三方依赖 -->
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>
    <exclusions>
        <exclusion>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 优化你的Hibernate配置代码

注意到你原代码中重复调用了configure()方法,这会覆盖之前的配置,可能引发潜在问题:

configuration.configure("hibernate.cfg.xml");
// ...
configuration.configure(); // 这行多余,会覆盖之前的配置

只需要保留第一行指定配置文件的调用即可,去掉重复的configure()。

完成以上步骤后,重新编译运行你的代码,应该就能正常通过CriteriaQuery获取列表数据了。

内容的提问来源于stack exchange,提问作者John Friday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:29