代码之家  ›  专栏  ›  技术社区  ›  Tora Tora Tora

SpringBoot JPA多对多关系-Rest Webservice无法返回子对象

  •  0
  • Tora Tora Tora  · 技术社区  · 8 年前

    我需要帮助从Spring Boot应用程序中检索数据,使用JPA处理多对多关系。我在获取父实体的子实体时遇到问题。

    我建立了一个简单的多对多关系:所有者<-&燃气轮机;帐簿(<)-&燃气轮机;出版商

    当我在控制器上执行GET以获取有关书籍的数据时,我只获取Books属性。不会返回有关关联所有者或发布者的信息。我错过了什么?

    正在执行 cURL -XGET http://localhost:8080/books 仅返回书本中的属性,而不返回从属对象:

    [
       {
          "id":1,
          "name":"Book 1",
          "isbn":"978-0743246261"
       },
       {
          "id":2,
          "name":"Book 2",
          "isbn":"978-0743246262"
       },
       {
          "id":3,
          "name":"Book 3",
          "isbn":"978-0743246263"
       },
       {
          "id":4,
          "name":"Book 4",
          "isbn":"978-0743246264"
       }
    ]
    

    Ive在GitHub中设置了该项目,可以立即运行和测试: https://github.com/tekpartner/learn-spring-boot-many-2-many

    2 回复  |  直到 7 年前
        1
  •  2
  •   Bhushan Uniyal    8 年前

    默认情况下,使用策略获取多对多关系 懒惰的 ,意味着在您不调用该方法从主对象检索多对多关系对象之前,hibernate将不会从数据库中加载它们。

    请设置抓取策略,以便hibernate在加载主对象期间加载多个关系

    fetch=FetchType.EAGER
    

    示例代码:

    @ManyToMany(mappedBy = "userGroups", fetch = FetchType.EAGER)
    private Set<User> users = new HashSet<User>();
    
        2
  •  0
  •   Tora Tora Tora    8 年前

    @bhushan uniyal上面指出的解决方案是交换引用JsonManagedReference&JsonBackReference,它起到了作用。推送了代码,成功了。