Frage

Ich gründe ein Projekt mit Hibernate 3.3.1 GA und PostgreSQL 8.3 auf. Ich habe gerade eine Datenbank, die erste Tabelle, fügte eine Zeile dort und jetzt Hibernate konfigurieren.

Doch selbst die einfachste Abfrage:

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

konnte nicht ausgeführt werden (leere Liste zurückgegeben, obwohl es ein Datensatz in der Datenbank). Ich schaute auf den PostgreSQL-Protokollen, um zu sehen:

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

Ich schrieb ein einfaches Programm Ebene JDBC mit den gleichen Daten holen und es funktioniert. PostgreSQL-Protokolle in diesem Fall wie folgt aussehen (zum Vergleich):

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-Protokoll zeigt keine Fehler. Wenn ich die Abfrage nehmen in den Protokollen aufgelistet:

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

und führen Sie es aus der Datenbank in den psql agains, es funktioniert (dies bedeutet, dass Hibernate eine richtige SQL erzeugt hat).

Im Folgenden finden Sie die Hibernate-Konfiguration:

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

... und die Mapping-Datei:

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

Googeln für unexpected EOF Protokolleintrag nicht friutful. Irgendwelche Ideen, Gemeinschaft?

War es hilfreich?

Lösung

Nach dem Debugger an den Hibernate-Code der Anwendung, es festgelegt ist!

Es ist nicht sichtbar in den Text der Frage, aber das Problem ist, dass Place zum createCriteria() Methode übergeben von einem anderen Paket ist, nicht com/example/data, in der XML-Konfigurationsdateien angegeben.

Hibernate ruft Class.isAssignableFrom(), und wenn falsch zurückgegeben wird, es verlässt leise, so dass die Verbindung unterbrochen wird. Ich werde in dieser Angelegenheit ein Ticket für Hibernate Entwickler öffnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top