title: Lombok - java.lang.StackOverflowError: null on toString method
body: <p>I have two classes <code>Product</code> and <code>Categorie</code>. When I would like to modify the list of products in categorie with <code>categoryRepository.save(c1)</code> as shown in the code below, this error occurs: </p>
  
  <pre><code> java.lang.StackOverflowError: null
      at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449) ~[na:1.8.0_191]
          at java.lang.StringBuilder.append(StringBuilder.java:136) ~[na:1.8.0_191]
          at org.sid.entities.Product.toString(Product.java:12) ~[classes/:na]
          at java.lang.String.valueOf(String.java:2994) ~[na:1.8.0_191]
          at java.lang.StringBuilder.append(StringBuilder.java:131) ~[na:1.8.0_191]
          at java.util.AbstractCollection.toString(AbstractCollection.java:462) ~[na:1.8.0_191]
          at java.lang.String.valueOf(String.java:2994) ~[na:1.8.0_191]
          at java.lang.StringBuilder.append(StringBuilder.java:131) ~[na:1.8.0_191]
          at org.sid.entities.Categorie.toString(Categorie.java:15) ~[classes/:na]
          at java.lang.String.valueOf(String.java:2994) ~[na:1.8.0_191]
  </code></pre>
  
  <hr>
  
  <pre><code>@Document
  @Data @AllArgsConstructor @NoArgsConstructor @ToString
  public class Categorie {
      @Id
      private String id;
      private String name;
      @DBRef
      @JsonIgnore
      private Collection&lt;Product&gt; products=new ArrayList&lt;&gt;();
  
  @Document
  @Data @AllArgsConstructor @NoArgsConstructor @ToString
  public class Product {
      @Id
      private String id;
      private String name;
      private double price;
      @DBRef
      private Categorie categorie;
  
  @Bean
      CommandLineRunner start(CategoryRepository categoryRepository, ProductRepository productRepository){
  
          return args -&gt; {
              categoryRepository.deleteAll();
              Stream.of("c1 Ordinateur","c2 Imprimente").forEach(c-&gt;{
                  categoryRepository.save(new Categorie(c.split(" ")[0],c.split(" ")[1],new ArrayList&lt;&gt;()));
              });
              categoryRepository.findAll().forEach(System.out::println);
  
              productRepository.deleteAll();
              Categorie c1=categoryRepository.findById("c1").get();
              Stream.of("P1","P2","P3","P4").forEach(name-&gt;{
                 Product p= productRepository.save(new Product(null,name,Math.random()*1000,c1));
                 c1.getProducts().add(p);
                 categoryRepository.save(c1);
              });
  
  productRepository.findAll().forEach(p-&gt;{
                  System.out.println(p.toString());
              });
  
          };
      }
  </code></pre>
  
  <p>Can anyone have an idea to solve this issue? Thanks.</p>