为什么我的toString()方法不起作用,如何防止在SpringBootJPA中返回嵌套结果?

huangapple go评论106阅读模式
英文:

Why is my toString() method not working and how to prevent nested returns in SpringBootJPA?

问题

我有两个实体,合作伙伴(Partner)和广告活动(Campaign),因此我已创建了一个“一对多”单向关系。

这是我的 Partner 实体:

  1. @Entity
  2. @Table(name = "partner")
  3. @EntityListeners(AuditingEntityListener.class)
  4. public class Partner {
  5. @Id
  6. @GeneratedValue(generator = "uuid")
  7. @GenericGenerator(name = "uuid", strategy = "uuid2")
  8. private String id;
  9. @NotNull
  10. @Column(name = "partner_name")
  11. private String partnerName;
  12. @NotNull
  13. @Column(name = "partner_code")
  14. private String partnerCode;
  15. @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
  16. @JoinColumn(name = "partner_id")
  17. private List<Campaign> campaigns = new ArrayList<>();
  18. // 构造方法,getter 和 setter,equals,hashcode
  19. @Override
  20. public String toString() {
  21. return "Partner{" +
  22. "id='" + id + '\'' +
  23. ", partnerName='" + partnerName + '\'' +
  24. ", partnerCode='" + partnerCode + '\'' +
  25. '}';
  26. }
  27. }

这是我的 Campaign 实体:

  1. @Entity
  2. @Table(name = "campaign")
  3. @EntityListeners(AuditingEntityListener.class)
  4. public class Campaign {
  5. @Id
  6. @GeneratedValue(generator = "uuid")
  7. @GenericGenerator(name = "uuid", strategy = "uuid2")
  8. private String id;
  9. @NotNull
  10. @Column(name = "partner_name")
  11. private String partnerName;
  12. @NotNull
  13. @Column(name = "partner_code")
  14. private String partnerCode;
  15. @NotNull
  16. @Column(name = "campaign_name")
  17. private String campaignName;
  18. @NotNull
  19. @Column(name = "campaign_code")
  20. private String campaignCode;
  21. // 构造方法,getter 和 setter,equals,hashcode
  22. @Override
  23. public String toString() {
  24. return "Campaign{" +
  25. "id='" + id + '\'' +
  26. ", partnerName='" + partnerName + '\'' +
  27. ", partnerCode='" + partnerCode + '\'' +
  28. ", campaignName='" + campaignName + '\'' +
  29. ", campaignCode='" + campaignCode + '\'' +
  30. '}';
  31. }
  32. }

但是,当我调用 findAll() 方法获取合作伙伴时,这是我的响应:

为什么我的toString()方法不起作用,如何防止在SpringBootJPA中返回嵌套结果?

我需要的是在获取 findAll() 合作伙伴方法的响应中不获取 Campaigns 属性。我不明白为什么我的 toString 方法不起作用,如果我已经定义了我只想打印 id、partnerName 和 partnerCode。

因此,我不希望有嵌套的响应。

提前感谢您的帮助。

英文:

I have two Entities, Partner and Campaign, so I have created a "One to many" unidirectional relationship.

This is my Partner entity:

  1. @Entity
  2. @Table(name = &quot;partner&quot;)
  3. @EntityListeners(AuditingEntityListener.class)
  4. public class Partner {
  5. @Id
  6. @GeneratedValue(generator = &quot;uuid&quot;)
  7. @GenericGenerator(name = &quot;uuid&quot;, strategy = &quot;uuid2&quot;)
  8. private String id;
  9. @NotNull
  10. @Column(name = &quot;partner_name&quot;)
  11. private String partnerName;
  12. @NotNull
  13. @Column(name = &quot;partner_code&quot;)
  14. private String partnerCode;
  15. @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
  16. @JoinColumn(name = &quot;partner_id&quot;)
  17. private List&lt;Campaign&gt; campaigns = new ArrayList&lt;&gt;();
  18. // constructos, getters, setters, equals, hashcode
  19. @Override
  20. public String toString() {
  21. return &quot;Partner{&quot; +
  22. &quot;id=&#39;&quot; + id + &#39;\&#39;&#39; +
  23. &quot;, partnerName=&#39;&quot; + partnerName + &#39;\&#39;&#39; +
  24. &quot;, partnerCode=&#39;&quot; + partnerCode + &#39;\&#39;&#39; +
  25. &#39;}&#39;;
  26. }

This is my Campaign entity:

  1. @Entity
  2. @Table(name = &quot;campaign&quot;)
  3. @EntityListeners(AuditingEntityListener.class)
  4. public class Campaign {
  5. @Id
  6. @GeneratedValue(generator = &quot;uuid&quot;)
  7. @GenericGenerator(name = &quot;uuid&quot;, strategy = &quot;uuid2&quot;)
  8. private String id;
  9. @NotNull
  10. @Column(name = &quot;partner_name&quot;)
  11. private String partnerName;
  12. @NotNull
  13. @Column(name = &quot;partner_code&quot;)
  14. private String partnerCode;
  15. @NotNull
  16. @Column(name = &quot;campaign_name&quot;)
  17. private String campaignName;
  18. @NotNull
  19. @Column(name = &quot;campaign_code&quot;)
  20. private String campaignCode;
  21. // constructos, getters, setters, equals, hashcode
  22. @Override
  23. public String toString() {
  24. return &quot;Campaign{&quot; +
  25. &quot;id=&#39;&quot; + id + &#39;\&#39;&#39; +
  26. &quot;, partnerName=&#39;&quot; + partnerName + &#39;\&#39;&#39; +
  27. &quot;, partnerCode=&#39;&quot; + partnerCode + &#39;\&#39;&#39; +
  28. &quot;, campaignName=&#39;&quot; + campaignName + &#39;\&#39;&#39; +
  29. &quot;, campaignCode=&#39;&quot; + campaignCode + &#39;\&#39;&#39; +
  30. &#39;}&#39;;
  31. }

However, when I call the findAll() method for the partners, this is my response:

为什么我的toString()方法不起作用,如何防止在SpringBootJPA中返回嵌套结果?

What I need is to not get the Campaigns atribute in the response when I get the findAll() partners method. I don't understand why my toString method is not working, if I have defined that I only what to print the id, partnerName and partnerCode.

So I don't want a nested response.

Thanks in advance.

答案1

得分: 3

你可以使用 @JsonIgnore 进行忽略,或者你可以在你的 @OneToMany 注解中添加一个属性以进行懒加载。将其替换为:

  1. @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
英文:

You can use @JsonIgnore to ignore it or you can add an attribute to your @OneToMany annotation to load it lazily. Replace it with:

  1. @OneToMany(fetch=FetchType.Lazy, cascade = CascadeType.ALL, orphanRemoval = true)

huangapple
  • 本文由 发表于 2020年8月24日 00:02:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/63549138.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定