我正在使用Hibernate 3.3.1 GA和PostgreSQL 8.3建立一个项目.我刚创建了一个数据库,第一个表,在那里添加了一行,现在正在配置Hibernate.但是,即使是最简单的查询:Criteria criteria = session.createCriteria(Place...
我正在使用Hibernate 3.3.1 GA和PostgreSQL 8.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
我使用普通的JDBC编写了一个简单的程序来获取相同的数据并且它有效.这种情况下的PostgreSQL日志看起来像这样(用于比较):
2008-09-17 22:52:24 CEST LOG: connection received: host=192.168.175.1 port=2668
2008-09-17 22:52:24 CEST LOG: connection authorized: user=... database=...
2008-09-17 22:52:25 CEST LOG: execute <unnamed>: SELECT * from PLACE
2008-09-17 22:52:25 CEST LOG: disconnection: session time: 0:00:00.456 user=... database=... host=192.168.175.1 port=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=?
并在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>
…和映射文件:
<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开发人员打开一张票.
本文标题为:java – Hibernate 3:无法查询PostgreSQL数据库
基础教程推荐
- Java 中 hashCode() 与 equals() 的关系(面试) 2023-06-01
- Java递归查找层级文件夹下特定内容的文件的方法 2023-01-09
- java开发中防止重复提交的几种解决方案 2023-06-17
- Java设计模式之状态模式 2023-06-17
- Java图像处理之获取用户感兴趣的区域 2023-03-22
- Spring AOP事务管理的示例详解 2023-01-18
- 为什么Java单例模式一定要加 volatile 2022-11-20
- 一文掌握Java中List和Set接口的基本使用 2023-03-07
- Spring Boot 的创建和运行示例代码详解 2023-03-15
- Netty序列化深入理解与使用 2023-03-22