Rumah  >  Soal Jawab  >  teks badan

java - spring mvc menyepadukan ralat akses hibernate5 Tidak dapat mencari sumber cfg.xml

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&amp;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>
        <!--<!&ndash;指定jpa属性&ndash;>-->
        <!--<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!

为情所困为情所困2713 hari yang lalu2073

membalas semua(2)saya akan balas

  • 黄舟

    黄舟2017-05-17 10:05:38

    Hibernate5.2 dan versi ke atas ditulis seperti ini:

    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: 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!

    balas
    0
  • PHPz

    PHPz2017-05-17 10:05:38

    Lihat konfigurasi web.xml, seperti berikut:

    <!-- 加载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>

    Sumber data, sessionFactory, pengurus transaksi dan transaksi dikonfigurasikan dalam daoContext.xml
    Adakah anda menambah ini? Lihat jika terdapat sebarang kesilapan

    balas
    0
  • Batalbalas