Question

Je prépare un projet avec Hibernate 3.3.1 GA et PostgreSQL 8.3 . Je viens de créer une base de données, la première table, y ai ajouté une ligne et maintenant je configure Hibernate.

Cependant, même la requête la plus simple:

Criteria criteria = session.createCriteria(Place.class);
List result = criteria.list();

n'a pas pu être exécuté (une liste vide est renvoyée bien qu'il y ait un enregistrement dans la base de données). J'ai consulté les journaux PostgreSQL pour voir:

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

J'ai écrit un programme simple utilisant JDBC pour récupérer les mêmes données et cela a fonctionné. Dans ce cas, les journaux PostgreSQL ressemblent à ceci (à titre de comparaison):

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  

Le journal de débogage d’Hibernate n’indique aucune erreur. Si je prends la requête listée dans les journaux:

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=?

et l'exécutez contre la base de données dans le psql, cela fonctionne (cela signifie que Hibernate a généré un code SQL correct).

Ci-dessous, la configuration d'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>

... et le fichier de mappage:

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

googler pour une entrée de journal inattendue EOF n'était pas friut. Des idées, une communauté?

Était-ce utile?

La solution

Après avoir appliqué le débogueur au code d'Hibernate, il est corrigé!

Cela n'est pas visible dans le texte de la question, mais le problème est que Place transmis à la méthode createCriteria () provient d'un autre package, et non com / example / data , spécifié dans les fichiers XML de configuration.

Hibernate appelle Class.isAssignableFrom () , et si false est renvoyé, il se ferme en mode silencieux, interrompant ainsi la connexion. Je vais ouvrir un ticket pour les développeurs Hibernate à ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top