休止状態 3:PostgreSQL データベースにクエリを実行できません
-
01-07-2019 - |
質問
を使用してプロジェクトをセットアップしています Hibernate 3.3.1 GA
そして PostgreSQL 8.3
. 。データベース、最初のテーブルを作成し、そこに 1 行を追加し、Hibernate を構成しています。
ただし、最も単純なクエリでも次のようになります。
Criteria criteria = session.createCriteria(Place.class);
List result = criteria.list();
実行できませんでした (データベースにレコードは 1 つありますが、空のリストが返されます)。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>
グーグルで検索 unexpected EOF
ログエントリは無駄ではありませんでした。何かアイデアやコミュニティはありますか?
解決
Hibernate コードにデバッガーを適用すると、問題は修正されました。
質問文には見えませんが、問題は Place
に渡されました createCriteria()
メソッドは別のパッケージからのものであり、 com/example/data
, 、構成 XML ファイルで指定されます。
Hibernate が呼び出す Class.isAssignableFrom()
, false が返された場合は、サイレントに終了し、接続が切断されます。この件に関して Hibernate 開発者向けにチケットをオープンします。