Spring MVC menyepadukan rangka kerja Hibernate5—sambungan pangkalan data dan maklumat lain telah dikonfigurasikan dalam fail dispatcher-servlet.xml Saya menulis fungsi mudah untuk membuat jadual data baharu (hanya beberapa fail tidak dilaporkan semasa dijalankan , tetapi org ralat Status HTTP 500 telah dilaporkan semasa mengakses hibernate.internal.util.config.ConfigurationException: Tidak dapat mencari sumber cfg.xml [hibernate.cfg.xml], tetapi pelik bahawa jadual data berjaya dibuat tetapi tiada. data telah ditulis.
Apa yang saya tertanya-tanya ialah sessionFactoryBean akan digunakan dan bukannya fail hibernate.cfg.xml selepas hibernate4 saya tidak mencipta fail hibernate.cfg.xml. Beberapa fail tertentu dan tangkapan skrin ralat adalah seperti berikut
fail penghantar-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 id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" 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 id="sessionFactory" 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 id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 找到实体包(pojo) -->
<property name="packagesToScan" value="com.hiber.*" />
<!--指定jpa适配器-->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</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 id="hibernateTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven />
</beans>
Fail Message.java
package com.hiber.entity;
import javax.persistence.*;
@Entity
public 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;
}
}
Fail 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;
@Controller
public 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 "数据添加成功!";
}
}
Tangkapan skrin ralat penyemak imbas
Tangkapan skrin penciptaan jadual data yang berjaya
Struktur Projek
Sila bantu untuk mengetahui apa masalahnya. Terima kasih terlebih dahulu!
Hibernate5.2 dan versi ke atas ditulis seperti ini:
org.hibernate.internal.util.config.ConfigurationException: Tidak dapat mencari sumber cfg.xml [hibernate.cfg.xml] Masalah telah diselesaikan, tetapi org.hibernate.service.spi.ServiceException: Tidak dapat muncul semula untuk buat perkhidmatan yang diminta [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment], juga membantu!
Lihat konfigurasi web.xml, seperti berikut:
Sumber data, sessionFactory, pengurus transaksi dan transaksi dikonfigurasikan dalam daoContext.xml
Adakah anda menambah ini? Lihat jika terdapat sebarang kesilapan