org.hibernate.HibernateException:当没有可用的连接时,必须设置'hibernate.dialect'

时间:2014-11-07 11:24:31

标签: java spring hibernate

当我运行我的项目时,我收到错误

  没有可用连接时必须设置

hibernate.dialect

使用此堆栈跟踪

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:684)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    javax.servlet.GenericServlet.init(GenericServlet.java:241)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    java.lang.Thread.run(Thread.java:722)

我无法理解此错误的来源。我的servlet.xml是

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:annotation-config/>
    <context:component-scan base-package="com.csc.StudentAdmission" />
    <mvc:annotation-driven/>
    <mvc:resources mapping="/resources/**" location="/resources/"/>
    <bean id="viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix">
            <value>/WEB-INF/</value>
        </property>
        <property name ="suffix">
            <value>.jsp</value>
        </property>
    </bean>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://localhost:5432/hibernatedb;create=true" />
        <property name="username" value="postgres" />
        <property name="password" value="root" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.csc.StudentAdmission"></property>
        <property name="hibernateProperties">
            <props>
                <prop key="dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <!-- <prop key="hibernate.current_session_context_class">thread</prop> --> 
            </props>
        </property>
    </bean>

</beans>

我的DAo文件是

package com.csc.student.DAO;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.csc.StudentAdmission.Student;

public class StudentInfo {
    @Autowired
    SessionFactory sessionFactory;

    public StudentInfo(){   
    }

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }


    public boolean saveStudentInfoIntoDB(Student student){

        Session session = getSessionFactory().openSession();

        session.beginTransaction();

        String hql = "FROM Student WHERE userName='" + student.getUserName()+ "' or rollNo='" + student.getRollNo() + "'";

        Query query = session.createQuery(hql);

        @SuppressWarnings("unchecked")
        List<Student> results = query.list();

        if (!results.isEmpty()) {
            return false;
        }

        session.save(student);
        session.getTransaction().commit();
        // closing the session

        session.close();
        return true;
    }
    public Student processLoginForm(String userName, String password){

        Session session = getSessionFactory().openSession();        
        session.beginTransaction();

        String hql = "FROM Student WHERE userName='"+userName+"' and password='"+password+"'";

        Query query = session.createQuery(hql);

        @SuppressWarnings("unchecked")
        List<Student> results = query.list();

        if(!results.isEmpty()){
            Student student = new Student();
            student =results.get(0);
            System.out.println(student.getFirstName());
            return student;
        }
        else 
            return null;
    }
}

实体名称也是学生。因此表名没有错误。但这个问题仍然存在。有人可以解决我的问题。

1 个答案:

答案 0 :(得分:4)

配置包含以下属性。

<prop key="dialect">org.hibernate.dialect.PostgreSQLDialect</prop>

但是hibernate无法识别dialect,属性hibernate.dialect就是您要查找的属性。

<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>

有关可用属性的完整列表,请从休眠中检查AvailableSettings类。