java - spring mvc整合hibernate5访问报错Could not locate cfg.xml resource
问题描述
Spring MVC整合Hibernate5框架—dispatcher-servlet.xml文件里已经配置了数据库连接等信息,写了个新建数据表的简单功能(就几个文件),运行没有报错但访问时报HTTP Status 500错误org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [hibernate.cfg.xml],不过很奇怪是数据表成功建立但没数据写入。我很纳闷的是hibernate4之后不是使用sessionFactoryBean代替hibernate.cfg.xml文件么,我没有建hibernate.cfg.xml文件。具体的一些文件和错误截图如下
dispatcher-servlet.xml文件
<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:context='http://www.springframework.org/schema/context' xmlns:tx='http://www.springframework.org/schema/tx' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd'> <!-- 扫描使用注解的类所在包 --> <context:component-scan base-package='com.hiber.*'/> <!-- 配置数据源 --> <bean destroy-method='close'><property name='driverClassName' value='com.mysql.jdbc.Driver' /><property name='url' value='jdbc:mysql://localhost:3306/hiber?useUnicode=yes&characterEncoding=UTF-8' /><property name='username' value='root' /><property name='password' value='3443'/> </bean> <bean class='org.springframework.orm.hibernate5.LocalSessionFactoryBean'><!-- 注入数据源 --><property name='dataSource' ref='dataSource'/><!-- 找到实体包(pojo) --><property name='packagesToScan' value='com.hiber.*' /><property name='hibernateProperties'> <props> <prop key='hibernate.dialect'>org.hibernate.dialect.MySQL57Dialect</prop> <prop key='hibernate.hbm2ddl.auto'>create</prop> <prop key='hibernate.show_sql'>true</prop> </props></property> </bean> <bean class='org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'><property name='dataSource' ref='dataSource' /><!-- 找到实体包(pojo) --><property name='packagesToScan' value='com.hiber.*' /><!--指定jpa适配器--><property name='jpaVendorAdapter'> <bean /></property><!--<!–指定jpa属性–>--><!--<property name='jpaProperties'>--> <!--<props>--><!--<prop key='hibernate.dialect'>org.hibernate.dialect.MySQL57Dialect</prop>--><!--<prop key='hibernate.hbm2ddl.auto'>create</prop>--><!--<prop key='hibernate.show_sql'>true</prop>--> <!--</props>--><!--</property>--> </bean> <!-- 配置hibernate事务管理器 --> <bean class='org.springframework.orm.hibernate5.HibernateTransactionManager'><property name='sessionFactory' ref='sessionFactory' /> </bean> <tx:annotation-driven /></beans>
Message.java文件
package com.hiber.entity;import javax.persistence.*;@Entitypublic class Message{ @Id @GeneratedValue(strategy = GenerationType.AUTO) int id; @Column(nullable = false) String text; public Message(String text) {setText(text); } public Message(){} public int getId() {return id; } public void setId(int id) {this.id = id; } public String getText() {return text; } public void setText(String text) {this.text = text; }}
IndexController.java文件
package com.hiber.controllers;import com.hiber.entity.Message;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class IndexController { @RequestMapping(value = '/persist') public String saveMessage(){Message message = new Message('Hello, world');StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();session.persist(message);tx.commit();return '数据添加成功!'; }}
浏览器错误截图
数据表新建成功截图
项目结构
大家帮忙看看究竟是哪里出了问题,Thanks in advance!
问题解答
回答1:Hibernate5.2版本以上这样写:
Message message = new Message('Hello,world!');Configuration configuration = new Configuration();StandardServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();session.persist(message);tx.commit();return '数据添加成功!';
org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [hibernate.cfg.xml]的问题解决了,但又出现了org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment],同样求助!
回答2:查看web.xml配置,如下:
<!-- 加载Spring --><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- spring默认的配置文件名称是:applicationContext.xml,如果是默认则不需要配置 --><context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/daoContext.xml</param-value></context-param>
其中daoContext.xml中就配置了数据源、sessionFactory,事务管理器、事务;你的有加这些吗?看错误是没有
相关文章:
1. 如何使用git对word文档进行版本控制?2. android - react-native 的headless.js Java API 的代码怎么使用?3. javascript - 你们怎样实现前端分页的?4. mac连接阿里云docker集群,已经卡了2天了,求问?5. javascript - Express 和 request 如何代理远程图片?6. pycharm运行python3.6突然出现R6034问题,请问如何处理?7. javascript - 原生canvas中如何获取到触摸事件的canvas内坐标?8. javascript - 关于fullpage.js 自动高度失效的问题9. mac 安装 python_MySQLdb10. python - Django内使用filter过滤时间,只认年份不认月份是怎么回事?
