Domanda

Sto installando un progetto usando Hibernate 3.3.1 GA e PostgreSQL 8.3 . Ho appena creato un database, la prima tabella, ho aggiunto una riga lì e ora configurando Hibernate.

Tuttavia, anche la query più semplice:

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

non può essere eseguito (viene restituito un elenco vuoto anche se nel database è presente un record). Ho guardato i log di PostgreSQL per vedere:

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

Ho scritto un semplice programma usando semplicemente JDBC per recuperare gli stessi dati e ha funzionato. I log PostgreSQL in questo caso si presentano così (per confronto):

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  

Il log di debug in ibernazione non indica alcun errore. Se prendo la query elencata nei registri:

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

ed eseguirlo nuovamente nel database in psql, funziona (questo significa che Hibernate ha generato un SQL appropriato).

Di seguito è la configurazione di 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>

... e il file di mappatura:

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

Googling per la voce di registro EOF imprevisto non è stato corretto. Qualche idea, comunità?

È stato utile?

Soluzione

Dopo aver applicato il debugger al codice Hibernate, viene corretto!

Non è visibile nel testo della domanda, ma il problema è che Place passato al metodo createCriteria () proviene da un altro pacchetto, non com / esempio / dati , specificato nei file XML di configurazione.

Hibernate invoca Class.isAssignableFrom () e, se viene restituito false, esce silenziosamente, interrompendo così la connessione. Aprirò un biglietto per gli sviluppatori di Hibernate su questo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top