【问题标题】:Hibernate + PostgreSQL throws an Exception: org.hibernate.exception.GenericJDBCException: Cannot open connectionHibernate + PostgreSQL 抛出异常:org.hibernate.exception.GenericJDBCException:无法打开连接
【发布时间】:2015-09-21 22:21:52
【问题描述】:

我使用 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 

兼容性 -->

        <!-- 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 

name="connection.url">jdbc:postgresql://localhost: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;

    }

}

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

【问题讨论】:

  • 请修正您的格式

标签: java hibernate web-services postgresql maven


【解决方案1】:

使用 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>

您已提供 可能是包路径不正确造成的问题。

【讨论】:

  • 我使用 try catch 块,异常是由以下原因引起的:org.postgresql.util.PSQLException: FATAL: database "login" does not exist but database is exists there
  • 但是表名是logindetail
  • 在此处使用数据库名称
  • 我使用她的数据库名称,现在它给出 org.hibernate.MappingException: Unknown entity: org.asad.dto.DatabaseClass
  • 这是类@Entity public class DatabaseClass {
猜你喜欢
  • 2014-07-11
  • 2011-03-05
  • 2020-07-15
  • 2015-09-03
  • 1970-01-01
  • 2013-06-27
相关资源
最近更新 更多