2015-05-14 58 views
0

我得到异常下面冬眠:获取异常而连接弹簧使用H2数据库

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). 
log4j:WARN Please initialize the log4j system properly. 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mysessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from input stream 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.naveen.java.InsertTest.main(InsertTest.java:12) 
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream 
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:508) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:677) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
    ... 12 more 
Caused by: org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect 
    at org.dom4j.io.SAXReader.read(SAXReader.java:484) 
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:499) 
    ... 16 more 

下面是员工的.java

package com.naveen.java; 

import javax.persistence.Id; 

public class Employee { 

private int id; 
private String name; 
private int salary; 
private String LASTNAME ; 

public String getLASTNAME() { 
    return LASTNAME; 
} 
public void setLASTNAME(String lASTNAME) { 
    this.LASTNAME = lASTNAME; 
} 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public float getSalary() { 
    return salary; 
} 
public void setSalary(int salary) { 
    this.salary = salary; 
} 

}

下面

是employeedao.java

package com.naveen.java; 
import org.springframework.orm.hibernate3.HibernateTemplate; 

public class EmployeeDao { 
HibernateTemplate template; 
public void setTemplate(HibernateTemplate template) { 
    this.template = template; 
} 

public void saveEmployee(Employee e){ 
    template.save(e); 
} 

public void updateEmployee(Employee e){ 
    template.update(e); 
} 

public void deleteEmployee(Employee e){ 
    template.delete(e); 
} 
} 

下面是inserttest.java低于

package com.naveen.java; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 

public class InsertTest { 
public static void main(String[] args) { 

    ApplicationContext con=new ClassPathXmlApplicationContext("applicationContext.xml"); 
    //Resource r=new ClassPathResource("applicationContext.xml"); 
    EmployeeDao dao=(EmployeeDao)con.getBean("d"); 

    Employee e=new Employee(); 
    e.setId(147); 
    e.setName("kumar"); 
    e.setSalary(70000); 

    //dao.saveEmployee(e); 
    dao.updateEmployee(e); 
} 
} 

都将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:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close"> 
     <property name="driverClassName" value="org.h2.Driver"/> 
     <property name="url" value="jdbc:h2:~/test"/> 
     <property name="username" value="sa"/> 
     <property name="password" value="123"/> 
    </bean> 


<bean id="mysessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 

     <property name="mappingResources"> 
     <list> 
     <value>employee-hbm.xml</value> 
     </list> 
     </property> 

     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 

      </props> 
     </property> 
    </bean> 

    <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory" ref="mysessionFactory"></property> 
    </bean> 

    <bean id="d" class="com.naveen.EmployeeDao"> 
    <property name="template" ref="template"></property> 
    </bean> </beans> 

第二届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-mapping-3.0.dtd"> 


<hibernate-mapping> 
    <class name="com.naveen.java.Employee" table="EMP558"> 

     <id name="id" type="int" column="id"> 
     <generator class="native"/> 
     </id> 
     <property name="firstName" column="NAME" type="string"/> 
     <property name="lastName" column="LASTNAME" type="string"/> 
     <property name="salary" column="salary" type="double"/> 
    </class> 
</hibernate-mapping> 

我试图通过JDBC链接和它的正常工作。

+0

你在哪里保留“employee-hbm.xml”?检查employee-hbm.xml的这个路径是否没有错。 – Bikku

+0

@arin两者都存在于相同的包/文件夹中。 – Adward

+0

你可以验证你的applicationContext.xml是否正确?我得到错误http://www.w3schools.com/xml/xml_validator.asp。看来结束标记丢失 – Reddy

回答

0

工资字段的int类型,但在Hibernate映射

+0

仍然没有进展。 感谢您的帮助 – Adward

+0

请更新这个问题,以反映您所做的更改 – Reddy

0

因为休眠试图获取DTD文件,这可能会导致双。所以,解决方法可能是:

  1. 变化不同于DTD来"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
  2. 值创建您自己的函数来解析配置然后传递到休眠这样

    public static Document parseConfiguration(String resourcePath) throws Exception { 
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
        factory.setValidating(false); <-- the magic is here 
        DocumentBuilder builder = factory.newDocumentBuilder(); 
        return builder.parse(builder.getClass().getResourceAsStream(resourcePath)); 
    } 
    
+0

对不起兄弟不工作 – Adward

0

虽然我在你的实体中定义了很多错误(在映射文件中定义的属性不存在于实体中),但我没有收到你所得到的错误。我已经达到了试图插入记录的那一步​​,所以我很好地过去了发生错误的阶段。

通过查看抛出错误的hibernate源文件(org.hibernate.cfg.Configuration.addInputStream(Configuration.java:499)),hibernate无法访问映射xml文件。

请仔细检查映射文件是否在正确的位置并且可读。 还要确保在类路径中有正确版本的hibernate jar。

+0

我知道有一些错误,但我仍然在我的情况下尝试单列仍然一次又一次得到相同的异常.. 可以分享你的哪个hibernate jar和dtd你使用...这将是一个很好的帮助.. – Adward

+0

我只复制了你的代码(包括你的包结构)。我正在使用休眠3.6.1。你能否检查你是否能够连接到映射DTD http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd? – Reddy

+0

做任何机构知道如何解决它...请帮助我的家伙.... – Adward