Java 使用Hibernate输出从表(PostgreSQL)检索所有行已损坏
所以我对hibernate还不熟悉,我想创建一个方法来检索表“servers”中的所有内容。有三列:serverId、server\u name和server\u Ip。我可以通过hibernate成功地从表中添加和删除行,但当我尝试获取所有行时,输出看起来好像列表没有强制转换到映射类(ServerEntity)上。我真的被困在这个可能微不足道的问题上了 这是从表服务器检索行的方法Java 使用Hibernate输出从表(PostgreSQL)检索所有行已损坏,java,database,postgresql,hibernate,Java,Database,Postgresql,Hibernate,所以我对hibernate还不熟悉,我想创建一个方法来检索表“servers”中的所有内容。有三列:serverId、server\u name和server\u Ip。我可以通过hibernate成功地从表中添加和删除行,但当我尝试获取所有行时,输出看起来好像列表没有强制转换到映射类(ServerEntity)上。我真的被困在这个可能微不足道的问题上了 这是从表服务器检索行的方法 public static List<ServersEntity[]> readDB() {
public static List<ServersEntity[]> readDB() {
final Session session = getSession();
session.getSessionFactory().openSession();
session.beginTransaction();
String hql = "FROM ServersEntity";
Query query = session.createQuery(hql);
List results = query.list();
session.getTransaction().commit();
System.out.println(results);
session.close();
return results;
}
ServersEntity.class
package org.openjfx;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "servers", schema = "public", catalog = "SERVERS")
public class ServersEntity {
private int serverId;
private String serverName;
private String serverIp;
@Id
@GenericGenerator(name = "idgen", strategy = "increment")
@GeneratedValue(generator = "idgen")
@Column(name = "server_ID", nullable = false)
public int getServerId() {
return serverId;
}
public void setServerId(int serverId) {
this.serverId = serverId;
}
@Basic
@Column(name = "server_name", nullable = true, length = -1)
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
}
@Basic
@Column(name = "server_IP", nullable = true, length = -1)
public String getServerIp() {
return serverIp;
}
public void setServerIp(String serverIp) {
this.serverIp = serverIp;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ServersEntity that = (ServersEntity) o;
return serverId == that.serverId &&
Objects.equals(serverName, that.serverName) &&
Objects.equals(serverIp, that.serverIp);
}
@Override
public int hashCode() {
return Objects.hash(serverId, serverName, serverIp);
}
}
我认为你的代码是好的。您收到了
ServersEntity
的列表。和System.out.println
打印此列表。问题是System.out.println
不知道如何打印ServersEntity
和打印对象的类名和id。尝试在ServersEntity类中添加toString
方法:
@Override
public String toString() {
return serverName + ": " + serverIp;
}
然后运行你的代码
当您尝试
从ServerEntity
中选择server\u name时,请选择您的接收字符串列表。和System.out.println
知道如何打印它。列表中的所有对象都是ServerSenty的实例。那么具体的问题是什么呢?你在做什么,你预计会发生什么,确切地说会发生什么?好吧,我想问题在于你的回报类型。该列表是ServersEntity的列表。它不是ServersEntity数组的列表。我不明白你为什么想要一个ServerSenty数组的列表。因此,将返回类型改为List,而不是List。我真的很笨,我现在不知道如何获取我放置的对象而不是它们的实例。数据库不是空的,比如初始化我的类的数组?好的,当我添加“从ServerEntity选择服务器名称”时,它按预期工作,但当我添加服务器Ip时,它显示实例SOMG就是这么简单。非常感谢:3
@Override
public String toString() {
return serverName + ": " + serverIp;
}