java - 查询 HQL 查询结果时 PersistentBag.toString() stackoverflow 错误

标签 java hibernate jpa hql

我是 Hibernate 的初学者,正在尝试实现一个 HQL 查询

Query q= em.createQuery("select p from Person p join p.company c");
        List<Person> l = q.getResultList();
        System.out.println(l.get(0));

当我运行上面的代码时,出现以下错误:

Exception in thread "main" java.lang.StackOverflowError
    at java.lang.StringBuilder.append(Unknown Source)
    at java.lang.StringBuilder.<init>(Unknown Source)
    at hibernate5.testing.onetomany.Person.toString(Person.java:71)
    at java.lang.String.valueOf(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)
    at java.util.AbstractCollection.toString(Unknown Source)
    at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:527)
    at java.lang.String.valueOf(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)
    at hibernate5.testing.onetomany.Company.toString(Company.java:72)
    at java.lang.String.valueOf(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)

但是,当我注释掉 sysout 时,它会按预期运行。根据堆栈跟踪,它似乎与 toString 方法有关,但我不确定是什么问题在这里。下面是POJO实体

getters and setters


    @Override
public String toString() {
    return "Person [id=" + id + ", name=" + name + ", company=" + company + "]";
}

公司

 getters and setters


        @Override
        public String toString() {
            return "Company [id=" + id + ", name=" + name + ", persons=" + persons + "]";
        }

有人可以帮忙吗?

最佳答案

您遇到的问题是 Person#toString 调用 Company#toString 并且 Company#toString 再次调用 Person#toSting.

所以,发生的事情是当 Person#toString 调用它时,调用了下面的 toString 定义:

    @Override
public String toString() {
    return "Person [id=" + id + ", name=" + name + ", company=" + company + "]";
}

现在可以看到你已经污染了公司,这意味着你的 return 语句实际上变成了 "Person [id="+ id + ", name="+ name + ", company="+ company.toString( ) + "]"; .因此,它调用 Company#toString() 现在看看 Company#toString() 的实现,它包含字符串连接中的 persons 对象。它再次调用 Person# toString() ,它继续下去,方法堆栈仍然溢出。

关于java - 查询 HQL 查询结果时 PersistentBag.toString() stackoverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560638/

相关文章:

java - 如何在Web应用程序中高效地使用quartz框架?

java - jpa 2 标准 hibernate 5.2 嵌套连接

java - joda hibernate 时间到 DB2 DATE

maven - 如何在 Intellij Idea 13 中将 Maven 项目部署到 Glassfish Server

java - 使用 Entity 和 EntityClass 从数据库填充 jTable 太慢

java - 为什么要使用JPA实体管理器?

java - Jsch 文件上传已取消

java - 对齐不同DesignGridLayout的标签列

java - 如何在 Spring Boot 中正确指定数据库模式?

java - 级联删除在更大数据集上的性能下降,这可能是由于缺乏索引造成的吗?