Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用H2数据库将Spring连接到hibernate时发生异常_Java_Spring_Hibernate - Fatal编程技术网

Java 使用H2数据库将Spring连接到hibernate时发生异常

Java 使用H2数据库将Spring连接到hibernate时发生异常,java,spring,hibernate,Java,Spring,Hibernate,我得到以下例外: 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.Bean

我得到以下例外:

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
}

下面是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>

employee-hbm.xml
org.hibernate.dial.h2方言
真的
第二个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进行链接,它工作正常。

工资字段具有int类型,但hibernate映射中有double,这可能是因为hibernate试图检索dtd文件。因此,解决办法可以是:

  • 将dtd的值从该值更改为
    ”http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd“
  • 创建自己的函数来解析配置,然后像这样传递给hibernate

    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)); 
    } 
    
    publicstaticdocumentparseconfiguration(stringresourcepath)引发异常{
    DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
    
    factory.setValidating(false);虽然我修复了实体中的许多错误(映射文件中定义的属性在实体中不存在),但我没有得到您得到的错误。我已经到达了它尝试插入记录的步骤,因此我已经远远超过了您得到错误的阶段

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

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

    保存“employee hbm.xml”的地方?检查employee-hbm.xml的路径是否正确。@arin两者都存在于同一个包/文件夹中。您能验证您的applicationContext.xml是否正确吗?我收到错误消息。似乎缺少结束标记。您好,您现在使用的是哪种hibernate版本?@Reddy很抱歉,输入错误。仍然没有进展。谢谢您的帮助。请更新问题反映您所做的更改我知道有一些错误,但我还是用一列进行了尝试。在我的情况下,我一次又一次地遇到相同的异常。您可以使用共享您的hibernate jar和dtd u r吗?这将是一个很大的帮助。我只复制了您的代码(包括您的包结构)。我正在使用hibernate 3.6.1。你能检查一下你是否能够连接到映射DTD吗?这看起来像是一些配置问题。你检查过你是否可以直接访问DTD吗?你也检查过你的类路径中是否有正确的hibernate jar吗?如果它只是一个简单的项目,你可能想重新做一次。
    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)); 
    }