Hiberneer 3: nie in staat om PostgreSQL databasis navraag
-
01-07-2019 - |
Vra
Ek oprigting van 'n projek met behulp van Hibernate 3.3.1 GA
en PostgreSQL 8.3
. Ek het nou net 'n databasis, die eerste tafel, bygevoeg 'n ry daar en nou instel Hibernate.
Maar selfs die eenvoudigste vraag:
Criteria criteria = session.createCriteria(Place.class);
List result = criteria.list();
kan nie uitgevoer word nie (leë lys teruggestuur al is daar 'n rekord in die databasis). Ek kyk na die PostgreSQL logs te sien:
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
Ek het 'n eenvoudige program met behulp van eenvoudige JDBC om dieselfde data haal en dit het gewerk. PostgreSQL logs in hierdie geval lyk dit (vir 'n vergelyking):
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 debug log nie enige foute aan te dui. Neem ek die navraag in die logs gelys:
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=?
en uit te voer dit agains die databasis in die psql, dit werk (dit beteken dat Hibernate n behoorlike SQL gegenereer).
Hier is die Hibernate opset:
<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>
... en die kartering lêer:
<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>
Googlen vir unexpected EOF
log inskrywing was nie friutful. Enige idees, gemeenskap?
Oplossing
Na die toepassing van debugger om die Hibernate kode, is dit vaste!
Dit is nie sigbaar in die teks die vraag, maar die probleem is dat Place
geslaag om die createCriteria()
metode is van 'n ander pakket, nie com/example/data
, wat in die opset XML-lêers.
Hibernate beroep Class.isAssignableFrom()
, en as vals is terug, dit uitgaan stil, dus die verbinding breek. Ek sal 'n kaartjie vir Hibernate ontwikkelaars oop op hierdie saak.