2016-04-03 78 views
0

我是Spring + Hibernate的新手,但是我在最后一天一直在处理这个问题。我仍然无法弄清楚什么是根本原因,我该怎么做。所以,如果有人能给我一些建议,请提前谢谢。Spring + Hibernate,无法读取xml错误

这里有一个问题,我只是写一个简单的测试类,但是当我跑,有一个例外:

??:上下文初始化过程中遇到异常 - 取消刷新>的尝试:org.springframework .beans.factory.BeanCreationException:错误>在类路径资源中定义名为'sessionFactory'的bean >>>>>>> [ApplicationContext.xml]:调用init方法失败;嵌套的异常是> org.hibernate.InvalidMappingException:无法读取线程中的异常“main”> org.springframework.beans.factory.BeanCreationException:在类路径资源中定义名称为'sessionFactory'的bean>时出错> [ApplicationContext。 xml]:调用init方法失败;嵌套的异常是> org.hibernate.InvalidMappingException:无法在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 读取XML 。 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) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at 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) at org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83) at com.xw.test.Test.main(Test.jav一: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", "[email protected]", new java.util.Date(), 
       (float) 234.56) ; 
     Transaction tx = s.beginTransaction(); 
     s.save(employee); 
     tx.commit(); 


    } 

} 

非常感谢你提出的任何建议!

回答

0

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

所以你的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> 

+0

嗨,先生Deendayal加尔格。非常感谢你的帮助。我根据你的建议进行了修改。但期望是相同的。顺便问一下,有没有可能告诉我我应该检查哪个手册。我试图找到一份官方手册来比较我是否错过了或误解了某些东西,但我无法确定我应该选择哪种版本。我为此感到抱歉。并祝你好! – xing