Hibernate + PostgreSQL抛出异常:org.hibernate.exception.GenericJDBCException:无法打开连接

时间:2015-07-04 06:19:59

标签: java hibernate web-services postgresql maven

我使用jersey + hibernate编写了一个用于restful webservice的java maven项目,并且有如下错误

    javax.servlet.ServletException: 
    org.hibernate.exception.GenericJDBCException: Cannot open connection

org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:419)

    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:
    381)

org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)

    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:
    221)


pom.xml File:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmln

s:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/maven-v4_0_0.xsd">



<modelVersion>4.0.0</modelVersion>


<groupId>org.asad.login</groupId>

<artifactId>login</artifactId>

<packaging>war</packaging>

<version>0.0.1-SNAPSHOT</version>

<name>login</name>

<build>

    <finalName>login</finalName>

    <plugins>

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-compiler-plugin</artifactId>

            <version>2.5.1</version>

            <inherited>true</inherited>

            <configuration>

                <source>1.7</source>


                <target>1.7</target>

            </configuration>

        </plugin>

    </plugins>

</build>

<dependencyManagement>

    <dependencies>

        <dependency>

            <groupId>org.glassfish.jersey</groupId>

            <artifactId>jersey-bom</artifactId>

            <version>${jersey.version}</version>

            <type>pom</type>


            <scope>import</scope>

        </dependency>

    </dependencies>

</dependencyManagement>

<dependencies>

    <dependency>

        <groupId>org.glassfish.jersey.containers</groupId>

        <artifactId>jersey-container-servlet-core</artifactId>


        <!-- use the following artifactId if you don't need servlet 2.x 

兼容性 - &gt;

        <!-- artifactId>jersey-container-servlet</artifactId -->

    </dependency>



 <dependency>

的javax.servlet

的javax.servlet-API

3.1.0

提供

    </dependency>

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-envers</artifactId>

<version>3.6.4.Final</version>

</dependency>


<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-validator</artifactId>

<version>4.2.0.Final</version>

<dependency>

<groupId>postgresql</groupId>

<artifactId>postgresql</artifactId>

<version>9.1-901-1.jdbc4</version>

</dependencies>


<properties>

    <jersey.version>2.16</jersey.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

hibernate.cfg.xml文件:

<?xml version='1.0' encoding='utf-8'?>

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<session-factory>


    <!-- Database connection settings -->

    <property name="connection.driver_class">org.postgresql.Drive</property>

    <property 

名称= “connection.url” &GT; JDBC:在PostgreSQL://本地主机:5432 / logindetail

    <property name="connection.username">postgres</property>

    <property name="connection.password">project</property>


    <!-- JDBC connection pool (use the built-in) -->

    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->

    <property 
name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

    <!-- Disable the second-level cache  -->

<property 
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->

<property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->

    <property name="hbm2ddl.auto">update</property>


    <property                name="connection.driver_class">org.postgresql.Driver</property>

    <!-- Names the annotated entity class -->

    <mapping class="org.asad.dto.DatabaseClass"/>

</session-factory>

从表中获取数据的类:

    public class LoginService{

SessionFactory sessionFactory = null;

    Session session = null;


    public String getDatabaseUser(){
        DatabaseClass user = null;

        sessionFactory = new Configuration().configure().buildSessionFactory();

        session = sessionFactory.openSession();

        session.beginTransaction();

        user = (DatabaseClass)session.get(DatabaseClass.class, 1);

        String name = user.getName();

        session.getTransaction().commit();

        session.close();

        return name;

    }

}

任何人都可以帮我消除这个错误我会感激.......... :)。

1 个答案:

答案 0 :(得分:0)

使用try catch块获取相应的异常

public String getDatabaseUser(){
        DatabaseClass user = null;
try{
        sessionFactory = new Configuration().configure().buildSessionFactory();

        session = sessionFactory.openSession();

        session.beginTransaction();

        user = (DatabaseClass)session.get(DatabaseClass.class, 1);

        String name = user.getName();

        session.getTransaction().commit();
        session.close();
    }catch(Exception e){
       e.printStackTrace();
     }
    return name;
        }

<property name="hibernate.connection.url"> jdbc:postgresql://localhost:5432/logindetail</property>

此处仅使用

<property name="hibernate.connection.url"> jdbc:postgresql://localhost:5432/login</property>

你提供了   由于包路径不正确可能会出现问题。