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

IntelliJ中Spring MVC+Hibernate项目报TypeNotPresentException错误求助

解决java.lang.TypeNotPresentException: Type org.hibernate.SessionFactory not present错误

嘿,我来帮你梳理这个问题的根源,一步步帮你修复:

核心问题:Hibernate依赖版本冲突

你pom.xml里同时引入了hibernate-core:5.2.5.Final和hibernate-entitymanager:5.0.12.Final——这俩版本差得太远了,而且从Hibernate 5.2开始,hibernate-entitymanager已经被合并到hibernate-core里了,单独引入低版本的entitymanager直接导致类加载混乱,org.hibernate.SessionFactory就是这么找不到的。

第一步:修复Hibernate依赖

修改pom.xml,删掉单独的hibernate-entitymanager依赖,只保留hibernate-core就行:

<!-- 只保留这个Hibernate核心依赖 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.5.Final</version>
</dependency>
<!-- 把下面这个删掉 -->
<!-- <dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-entitymanager</artifactId>
 <version>5.0.12.Final</version>
</dependency> -->

其他几个需要调整的点

第二步:确保Spring版本和Hibernate兼容

你的${org.springframework-version}建议用4.3.x系列(比如4.3.18.RELEASE),这个版本和Hibernate 5.2.x完美适配,能避免Spring ORM和Hibernate之间的类不兼容问题。

第三步:修正数据库URL格式

你Dispatcher.xml里的JDBC URL写错了:

<beans:property name="jdbcUrl" value="jdbc:oracle:thin:hr@//localhost:1521.org:1521/xe" />

这里的localhost:1521.org:1521明显格式错误,改成正常的Oracle连接URL:

<beans:property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521/xe" />

第四步:给控制器方法加事务注解

你的HomeController里直接调用save方法,但没有开启事务,运行时会抛出事务缺失的错误,给方法加上@Transactional注解:

@Controller
public class HomeController {
    @Autowired
    SessionFactory sessionFactory;

    @GetMapping("/")
    @Transactional // 加上这个注解,确保操作在事务中执行
    public String index(Model m) {
        m.addAttribute("someAttribute", "someValue");
        Person person = new Person();
        person.setName("efe");
        person.setCountry("Italy");
        // 别手动设id,你的实体用了IDENTITY自增,数据库会自动生成
        sessionFactory.getCurrentSession().save(person);
        return "index";
    }
}

第五步:检查Tomcat部署时的依赖

用IntelliJ部署的时候,要确认项目的Artifact把所有依赖(Hibernate、Spring、C3P0这些)都打包到了WEB-INF/lib目录里。可以在Run/Debug Configuration的Deployment标签页里查看Artifact的内容,确保没有漏掉依赖。

最后验证

改完这些之后,重新构建项目,启动Tomcat,访问根路径,应该就能正常把数据存到数据库里,不会再出现500错误和TypeNotPresentException了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:04:08