Hibernate 3: невозможно запросить базу данных PostgreSQL

Я создаю проект с использованием Hibernate 3.3.1 GA и PostgreSQL 8.3. Я только что создал базу данных, первую таблицу, добавил туда одну строку и теперь настраиваю Hibernate.

Однако даже самый простой запрос:

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

не может быть выполнено (возвращается пустой список, хотя в базе есть одна запись). Я просмотрел журналы 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>

Поиск в Google записи в журнале unexpected EOF оказался неэффективным. Есть идеи, сообщество?

Похоже, проблема в вашей конфигурации. Можете ли вы опубликовать его без имени пользователя / пароля?

Joshua 20.09.2008 17:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
1
13 675
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После применения отладчика к коду Hibernate это исправлено!

Это не видно в тексте вопроса, но проблема в том, что Place, переданный методу createCriteria(), принадлежит другому пакету, а не com/example/data, указанному в файлах конфигурации XML.

Hibernate вызывает Class.isAssignableFrom(), и если возвращается false, он тихо завершает работу, разрывая соединение. Я открою заявку для разработчиков Hibernate по этому поводу.

Другие вопросы по теме