Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 Hibernate 3:无法查询PostgreSQL数据库_Java_Database_Hibernate_Postgresql_Jdbc - Fatal编程技术网

Java Hibernate 3:无法查询PostgreSQL数据库

Java Hibernate 3:无法查询PostgreSQL数据库,java,database,hibernate,postgresql,jdbc,Java,Database,Hibernate,Postgresql,Jdbc,我正在使用hibernate3.3.1ga和postgresql8.3建立一个项目。我刚刚创建了一个数据库,第一个表,在那里添加了一行,现在配置Hibernate 但是,即使是最简单的查询: Criteria criteria = session.createCriteria(Place.class); List result = criteria.list(); 无法执行(虽然数据库中有一条记录,但返回空列表)。我查看了PostgreSQL日志以了解: 2008-09-17 22:52:59

我正在使用
hibernate3.3.1ga
postgresql8.3
建立一个项目。我刚刚创建了一个数据库,第一个表,在那里添加了一行,现在配置Hibernate

但是,即使是最简单的查询:

Criteria criteria = session.createCriteria(Place.class);
List result = criteria.list();
无法执行(虽然数据库中有一条记录,但返回空列表)。我查看了PostgreSQL日志以了解:

2008-09-17 22:52:59 CEST LOG:  connection received: host=192.168.175.1 port=2670  
2008-09-17 22:52:59 CEST LOG:  connection authorized: user=... database=...  
2008-09-17 22:53:00 CEST LOG:  execute <unnamed>: SHOW TRANSACTION ISOLATION LEVEL  
2008-09-17 22:53:02 CEST LOG:  could not receive data from client: Connection reset by peer  
2008-09-17 22:53:02 CEST LOG:  unexpected EOF on client connection  
2008-09-17 22:53:02 CEST LOG:  disconnection: session time: 0:00:03.011 user=... database=... host=192.168.175.1 port=2670
2008-09-17 22:52:59 CEST日志:收到连接:主机=192.168.175.1端口=2670
2008-09-17 22:52:59 CEST日志:已授权连接:用户=。。。数据库=。。。
2008-09-17 22:53:00 CEST日志:执行:显示事务隔离级别
2008-09-17 22:53:02 CEST日志:无法从客户端接收数据:对等方重置连接
2008-09-17 22:53:02 CEST日志:客户端连接上出现意外EOF
2008-09-17 22:53:02 CEST日志:断开连接:会话时间:0:00:03.011用户=。。。数据库=。。。主机=192.168.175.1端口=2670
我用普通的JDBC编写了一个简单的程序来获取相同的数据,它成功了。本例中的PostgreSQL日志如下所示(用于比较):

2008-09-17 22:52:24 CEST日志:收到连接:主机=192.168.175.1端口=2668
2008-09-17 22:52:24 CEST日志:已授权连接:用户=。。。数据库=。。。
2008-09-17 22:52:25 CEST日志:执行:从位置选择*
2008-09-17 22:52:25 CEST日志:断开连接:会话时间:0:00:00.456用户=。。。数据库=。。。主机=192.168.175.1端口=2668
Hibernate调试日志未指示任何错误。如果我接受日志中列出的查询:

15:17:01,859 DEBUG org.hibernate.loader.entity.EntityLoader: Static select for entity com.example.data.Place: select place0_.ID as ID0_0_, place0_.NAME as NAME0_0_, place0_.LATITUDE as LATITUDE0_0_, place0_.LONGITUDE as LONGITUDE0_0_ from PLACE place0_ where place0_.ID=? 15:17:01859调试org.hibernate.loader.entity.EntityLoader:entity com.example.data.Place的静态选择:选择place0_0.ID作为ID0_0,place0_0.NAME作为NAME0_0,place0_0.LATITUDE作为LATITUDE0_0,place0_0.经度作为纵向0_0,从place0_0_0开始,其中place0_0.ID=? 然后在psql中的数据库中重新执行它,它就工作了(这意味着Hibernate已经生成了一个正确的SQL)

下面是Hibernate配置:

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.url">jdbc:postgresql://192.168.175.128:5433/...</property>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.username">...</property>
        <property name="hibernate.connection.password">...</property>
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.use_outer_join">true</property>

        <mapping resource="com/example/data/Place.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

jdbc:postgresql://192.168.175.128:5433/...
org.postgresql.Driver
...
...
org.hibernate.dialogue.PostgreSqlDialogue
真的
真的
…和映射文件:

<hibernate-mapping package="com.example.data">
    <class name="com.example.data.Place" table="PLACE">
        <id column="ID" name="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property column="NAME" name="name" not-null="true" type="java.lang.String">
            <meta attribute="use-in-tostring">true</meta>
        </property>
        <property column="LATITUDE" name="latitude" not-null="true" type="java.lang.Float">
            <meta attribute="use-in-tostring">true</meta>
        </property>
        <property column="LONGITUDE" name="longitude" not-null="true" type="java.lang.Float">
            <meta attribute="use-in-tostring">true</meta>
        </property>
    </class>
</hibernate-mapping>

真的
真的
真的

用谷歌搜索
意外的EOF
日志条目并不无聊。有什么想法吗,社区?

在将调试器应用到Hibernate代码之后,它被修复了

它在问题文本中不可见,但问题是传递给
createCriteria()
方法的
Place
来自另一个包,而不是配置XML文件中指定的
com/example/data


Hibernate调用
Class.isAssignableFrom()
,如果返回false,它将静默退出,从而中断连接。我将为Hibernate开发人员就这件事开一张罚单。

看来问题可能出在您的配置中。你能在没有用户名/密码的情况下发布吗?
<hibernate-mapping package="com.example.data">
    <class name="com.example.data.Place" table="PLACE">
        <id column="ID" name="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property column="NAME" name="name" not-null="true" type="java.lang.String">
            <meta attribute="use-in-tostring">true</meta>
        </property>
        <property column="LATITUDE" name="latitude" not-null="true" type="java.lang.Float">
            <meta attribute="use-in-tostring">true</meta>
        </property>
        <property column="LONGITUDE" name="longitude" not-null="true" type="java.lang.Float">
            <meta attribute="use-in-tostring">true</meta>
        </property>
    </class>
</hibernate-mapping>