Прежде всего, извините за мой плохой английский. Я пытаюсь отобразить строки базы данных (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 (все это используется по умолчанию, если не указано). Во-вторых, отладьте свою проблему, посмотрев в ЖУРНАЛ поставщика JPA и посмотрев на вызванный SQL.
Я указал таблицу, и это не сработало. Я добавил экран моего источника данных. Я думаю, что подключаюсь к правильной базе данных
Также почему вы указываете информацию о подключении, специфичную для Hibernate (hibernate.connection *), когда вы также предоставляете стандартные свойства JPA, которые подходят для определения базы данных переносимым способом.
@BillyFrost Это правда, что указывать @Table не нужно. Но если вы этого не сделаете, тогда должна существовать таблица, названная как объект. В противном случае JPA может создать (пустую) таблицу.
@ltlBeBoy Неправильно. ВСЕ, что делает @Table, - это ОПРЕДЕЛЕНИЕ имени, и если оно не указано, то имя по умолчанию совпадает с именем объекта. Существование таблицы - это параллельная концепция, таблица может быть создана поставщиком JPA, если вы скажете ему ...
@BillyFrost Посмотрите, если у вас есть таблица с именем my_user, содержащая все пользовательские данные, и имя объекта - Users, тогда (если указано) новая таблица и пусто будет создана JPA. Выбранные запросы будут тогда пустыми ... Это то, что было описано в вопросе.
@ltlBeBoy Аннотацию таблицы указывать не нужно. Аннотации сущности достаточно, и она не чувствительна к регистру




Вы указали URL-адрес jdbc:postgresql://localhost:5432/test для свойства javax.persistence.jdbc.url. Но когда я смотрю на второй снимок экрана, я не вижу схему базы данных с именем test.
Я думаю, вы подключаетесь не к той базе данных. Может быть, второй экземпляр слушает другой порт?
Также удалите специфические свойства Hibernate, которые уже указаны стандартными свойствами JPA (как указано в комментариях Билли Фроста).
@ SławekAdamiec Отлично! Примите ответ, щелкнув значок галочки, если это решило вашу проблему.
Вы не указали аннотацию
@Table(name = "<name of table with users>")для своей сущности (см. этот ответ для дальнейшего объяснения). Это означает, что должна существовать таблица с именемUsers. Если таблица существует, подключаетесь ли вы к правильной базе данных?