【问题标题】:Spring + Hibernate, can not read xml errorSpring + Hibernate,无法读取 xml 错误
【发布时间】:2016-04-03 12:01:46
【问题描述】:

我是 Spring + Hibernate 的新手,但我最近一天一直在解决这个问题。我仍然无法弄清楚根本原因是什么,我该怎么办。所以,如果有人能给我一些建议,请提前谢谢你。

这里有个问题,我只是写了一个简单的测试类,但是跑的时候出现异常:

??:上下文初始化期间遇到异常-取消刷新>尝试:org.springframework.beans.factory.BeanCreationException:错误>在类路径资源中创建名称为'sessionFactory'的bean >>>>>> [ApplicationContext .xml]:调用init方法失败;嵌套异常是 >org.hibernate.InvalidMappingException:无法读取 XML 线程“主”>org.springframework.beans.factory.BeanCreationException 中的异常:创建 bean 时出错>在类路径资源中定义名称为“sessionFactory”> [ApplicationContext.xml]:调用 init 方法失败;嵌套异常是> org.hibernate.InvalidMappingException:无法读取 XML 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) 在 com.xw.test.Test.main(Test.java:30)

这里是类源代码:

package com.domain;

import java.util.Date;

public class Employee {

    private Integer id;

    private String name;
    private String email;
    private java.util.Date hiredate;
    private Float salary;

    public Float getSalary() {
        return salary;
    }
    public void setSalary(Float salary) {
        this.salary = salary;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public java.util.Date getHiredate() {
        return hiredate;
    }
    public void setHiredate(java.util.Date hiredate) {
        this.hiredate = hiredate;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    public Employee( String name, String email, Date hiredate,
            Float salary) {
        this.name = name;
        this.email = email;
        this.hiredate = hiredate;
        this.salary = salary;
    }

    public Employee(){
    }
    }

这里是 Employee.hbm.xml

  <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-mapping package="com.domain">
   <class name="Employee" table="employee">
        <id name="id" type="java.lang.Integer">
            <generator class="native" ></generator> 
        </id>

   <property name="email" type="java.lang.String" >
        <column name="email" length="64"/>
   </property>

   <property name="hiredate" type="java.util.Date">
   <column name="hiredate" />
   </property>

   <property name="name" type="java.lang.String">
   <column name="name"/>
   </property>

   <property name="salary" type="java.lang.Float">
   <column name="salary"/>
   </property>


   </class>
</hibernate-mapping>

这里是 ApplicationContext.cfg.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"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-4.1.xsd">

<bean id="testService" class="com.xw.test.TestService">
    <property name="name" value="XingWang"/>
</bean>


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
    <property name="username" value="scott"/>
    <property name="password" value="111111"/>
    <property name="initialSize" value="3"/>
    <property name="maxActive" value="500"/>
    <property name="maxIdle" value="2"/>
    <property name="minIdle" value="1"/>
</bean>


<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
        <list>
            <value>com/domain/Employee.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.OracleDialect

        </value>
    </property>
</bean>

</beans>

还有 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>myssh</groupId>
  <artifactId>myssh</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebRoot</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>


  </build>

    <dependencies>
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.2.Final</version>
</dependency>




   <dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>


<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>

</dependencies>

这里是smiple测试类源代码:

/**
 * 
 */
package com.xw.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.domain.Employee;

/**
 * @author Administrator
 *
 */
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");

        SessionFactory sf = (SessionFactory) ac.getBean("sessionFactory");
        Session s = sf.openSession();

        Employee employee = new Employee( "aa", "aa.sohu@com", new java.util.Date(),
                (float) 234.56) ;
        Transaction tx = s.beginTransaction();
        s.save(employee);
        tx.commit();


    }

}

非常感谢您的任何建议!

【问题讨论】:

    标签: java xml spring hibernate


    【解决方案1】:

    属性应该在你的 sessionFactory Bean 中声明如下。

               <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
               </props>
    

    所以你的 sessionFactory bean 将如下所示。

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
        <list>
            <value>com/domain/Employee.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
               <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
               </props>
    </property>
    

    【讨论】:

    • 嗨,Deendayal Garg 先生。非常感谢你的帮助。我已经根据您的建议进行了修改。但期待是一样的。顺便问一下,你有没有可能告诉我我应该检查哪本手册。我正在尝试查找官方手册来比较我是否错过或误解了某些内容,但我无法确定我应该选择哪个版本。我为此感到抱歉。并向您致以最良好的祝愿!
    【解决方案2】:

    有时可能无法选择您的配置文件,因为编译器不知道应该使用哪个文件进行配置。因此,您应该通过 2 种方法显式导入这些配置文件,因为我知道 1)通过使用类

    @Configuration
    @ImportResource(value = {"classpath:{filename-within-resource}/Employee.hbm.xml"},"classpath:{filename-within-resource}/ApplicationContext.cfg.xml")
    
    public class CommonSolutionConfig {
    
    }
    

    2)通过使用xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
        <import resource="classpath:{filename-within-resource}/Employee.hbm.xml"/>
        <import resource="classpath:{filename-within-resource}/ApplicationContext.cfg.xml"/>
    </beans> 
    

    希望它能解决你的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-22
      • 2013-11-14
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多