Java ee, повторный запуск JPA 2.1 null

Прежде всего, извините за мой плохой английский. Я пытаюсь отобразить строки базы данных (Postgres) из одной таблицы, и она всегда возвращает null. Я делаю проект в Java EE с использованием спящего режима JPA.

<?xml version = "1.0" encoding = "UTF-8"?>
<persistence xmlns = "http://java.sun.com/xml/ns/persistence" version = "2.0">

    <persistence-unit name = "mesPU">

        <class>pl.mes.model.Users</class>
        <properties>
            <property name = "javax.persistence.jdbc.driver" value = "org.postgresql.Driver" />
            <property name = "javax.persistence.jdbc.url" value = "jdbc:postgresql://localhost:5432/test" />
            <property name = "javax.persistence.jdbc.user" value = "postgres" />
            <property name = "javax.persistence.jdbc.password" value = "xxxxxx" />
            <property name = "hibernate.show_sql" value = "true" />
            <property name = "hibernate.hbm2ddl.auto" value = "update" />
            <property name = "hibernate.connection.url" value = "jdbc:postgresql://localhost:5432/test"/>
            <property name = "hibernate.connection.driver_class" value = "org.postgresql.Driver"/>
            <property name = "hibernate.dialect" value = "org.hibernate.dialect.PostgreSQL9Dialect"/>
        </properties>
    </persistence-unit>
</persistence>

Сущность пользователей

package pl.mes.model;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Users {
    private Integer userId;
    private String firstname;
    private String secondname;
    private String email;

    @Id
    @Column(name = "userId", nullable = false)
    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @Basic
    @Column(name = "firstname", nullable = true)
    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    @Basic
    @Column(name = "secondname", nullable = true)
    public String getSecondname() {
        return secondname;
    }

    public void setSecondname(String secondname) {
        this.secondname = secondname;
    }

    @Basic
    @Column(name = "email", nullable = true)
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Users users = (Users) o;

        if (userId != null ? !userId.equals(users.userId) : users.userId != null) return false;
        if (firstname != null ? !firstname.equals(users.firstname) : users.firstname != null) return false;
        if (secondname != null ? !secondname.equals(users.secondname) : users.secondname != null) return false;
        if (email != null ? !email.equals(users.email) : users.email != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = userId != null ? userId.hashCode() : 0;
        result = 31 * result + (firstname != null ? firstname.hashCode() : 0);
        result = 31 * result + (secondname != null ? secondname.hashCode() : 0);
        result = 31 * result + (email != null ? email.hashCode() : 0);
        return result;
    }
}

Когда я использую это

выберите u из пользователей u

в выводе консоли выглядит так: выход

DbSOURCE Буду признателен, если кто-нибудь сможет мне с этим помочь :)

Вы не указали аннотацию @Table(name = "<name of table with users>") для своей сущности (см. этот ответ для дальнейшего объяснения). Это означает, что должна существовать таблица с именем Users. Если таблица существует, подключаетесь ли вы к правильной базе данных?

ltlBeBoy 04.11.2018 10:15

Во-первых, НЕ ТРЕБУЕТСЯ указывать @Table (все это используется по умолчанию, если не указано). Во-вторых, отладьте свою проблему, посмотрев в ЖУРНАЛ поставщика JPA и посмотрев на вызванный SQL.

user3973283 04.11.2018 10:34

Я указал таблицу, и это не сработало. Я добавил экран моего источника данных. Я думаю, что подключаюсь к правильной базе данных

Sławek Adamiec 04.11.2018 10:34

Также почему вы указываете информацию о подключении, специфичную для Hibernate (hibernate.connection *), когда вы также предоставляете стандартные свойства JPA, которые подходят для определения базы данных переносимым способом.

user3973283 04.11.2018 10:41

@BillyFrost Это правда, что указывать @Table не нужно. Но если вы этого не сделаете, тогда должна существовать таблица, названная как объект. В противном случае JPA может создать (пустую) таблицу.

ltlBeBoy 04.11.2018 10:43

@ltlBeBoy Неправильно. ВСЕ, что делает @Table, - это ОПРЕДЕЛЕНИЕ имени, и если оно не указано, то имя по умолчанию совпадает с именем объекта. Существование таблицы - это параллельная концепция, таблица может быть создана поставщиком JPA, если вы скажете ему ...

user3973283 04.11.2018 10:51

@BillyFrost Посмотрите, если у вас есть таблица с именем my_user, содержащая все пользовательские данные, и имя объекта - Users, тогда (если указано) новая таблица и пусто будет создана JPA. Выбранные запросы будут тогда пустыми ... Это то, что было описано в вопросе.

ltlBeBoy 04.11.2018 10:57

@ltlBeBoy Аннотацию таблицы указывать не нужно. Аннотации сущности достаточно, и она не чувствительна к регистру

ksadjad 04.11.2018 10:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы указали URL-адрес jdbc:postgresql://localhost:5432/test для свойства javax.persistence.jdbc.url. Но когда я смотрю на второй снимок экрана, я не вижу схему базы данных с именем test.

Я думаю, вы подключаетесь не к той базе данных. Может быть, второй экземпляр слушает другой порт?

Также удалите специфические свойства Hibernate, которые уже указаны стандартными свойствами JPA (как указано в комментариях Билли Фроста).

@ SławekAdamiec Отлично! Примите ответ, щелкнув значок галочки, если это решило вашу проблему.

ltlBeBoy 04.11.2018 12:27

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