Java 弹簧&x2B;Hibernate,无法读取xml错误

Java 弹簧&x2B;Hibernate,无法读取xml错误,java,xml,spring,hibernate,Java,Xml,Spring,Hibernate,我是Spring+Hibernate的新手,但我已经研究这个问题一天了。我仍然不知道根本原因是什么,我应该怎么做。所以,如果有人能给我一些建议,请提前谢谢你 这里有一个问题,我只编写了一个简单的测试类,但当我运行时,出现了一个异常: ??:上下文初始化期间遇到异常-取消刷新>尝试:org.springframework.beans.factory.beancreatitionException:错误>创建名为“sessionFactory”的bean(在类路径资源中定义)>>>>>>>>>[Ap

我是Spring+Hibernate的新手,但我已经研究这个问题一天了。我仍然不知道根本原因是什么,我应该怎么做。所以,如果有人能给我一些建议,请提前谢谢你

这里有一个问题,我只编写了一个简单的测试类,但当我运行时,出现了一个异常:

??:上下文初始化期间遇到异常-取消刷新>尝试:org.springframework.beans.factory.beancreatitionException:错误>创建名为“sessionFactory”的bean(在类路径资源中定义)>>>>>>>>>[ApplicationContext.xml]:调用init方法失败;嵌套异常为>org.hibernate.InvalidMappingException:无法读取XML 线程“main”>org.springframework.beans.factory.BeanCreationException中出现异常:创建名为“sessionFactory”的bean>时出错,该名称在类路径资源>[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.PreInstanceSingleton(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(){
    }
    }
/**
 * 
 */
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();


    }

}
这里是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>

非常感谢您的建议

属性应该在SessionFactorybean中声明,如下所示

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

org.hibernate.dialen.oraclealent
因此,您的SessionFactorybean如下所示

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

com/domain/Employee.hbm.xml
org.hibernate.dialen.oraclealent

有时可能无法选择您的配置文件,因为编译器不知道应该使用哪个文件进行配置。因此,您应该通过我知道的两种方法显式导入这些配置文件 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> 


希望它能解决你的问题

嗨,迪恩迪亚尔·加格先生。非常感谢你的帮助。我已经按照你的建议修改了。但期望是一样的。顺便问一下,你能告诉我该看哪本手册吗。我试图找到一本官方手册来比较我是否遗漏或理解错误,但我不能确定我应该选择哪个版本。对此我很抱歉。向你致以最良好的祝愿!
@Configuration
@ImportResource(value = {"classpath:{filename-within-resource}/Employee.hbm.xml"},"classpath:{filename-within-resource}/ApplicationContext.cfg.xml")

public class CommonSolutionConfig {

}
<?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>