【问题标题】:Errors on getters with annotations带有注释的 getter 错误
【发布时间】:2019-04-11 14:48:11
【问题描述】:

我正在学习一个很好的教程:https://www.youtube.com/watch?v=7YyR7lZyH5Y
我被困在 35:45,因为我在 Eclipse 中有一些错误,“c1.getProducts().add(p);”而且堆栈跟踪对我来说真的是一派胡言。

我的代码是这样的:

@SpringBootApplication
public class CatalogServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(CatalogServiceApplication.class, args);
    }

    /* Traitement réalisé au démarrage de l'application
     * On initialise ici une partie des données
     */
    @Bean
    CommandLineRunner start(CategoryRepository categoryRepository, ProductRepository productRepository) {
        return args->{
            categoryRepository.deleteAll();
            Stream.of("C1 Ordinateurs", "C2 Imprimantes").forEach(c->{
                categoryRepository.save(new Category(c.split(" ")[0],c.split(" ")[1], new ArrayList<>()));
            });
            categoryRepository.findAll().forEach(System.out::println);

            productRepository.deleteAll();
            Category c1=categoryRepository.findById("C1").get();
            Stream.of("P1", "P2", "P3","P4").forEach(name->{
                Product p=productRepository.save(new Product(null, name, Math.random()*1000,c1));
                c1.getProducts().add(p);
                categoryRepository.save(c1);
            });

            Category c2=categoryRepository.findById("C2").get();
            Stream.of("P5", "P6", "P7","P8").forEach(name->{
                Product p=productRepository.save(new Product(null, name, Math.random()*1000,c2));
                c1.getProducts().add(p);
                categoryRepository.save(c2);
            });

            productRepository.findAll().forEach(p->{
                System.out.println(p.toString());
            });
        };
    }
}

//用Lombok注解的类类别

import java.util.ArrayList;
import java.util.Collection;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

// Un document est un enregistrement dans la base - au format JSON
@Document
@Data @AllArgsConstructor @NoArgsConstructor @ToString
public class Category {

    // En principe les id sont des String avec MongoDB
    @Id
    private String id;
    private String name;
    // On suppose que la liste est vide à la création de la Category
    @DBRef
    private Collection<Product> products = new ArrayList<>();
}

预期的结果是将产品添加到类别列表中。 Eclipse 中的错误说: [错误] 错误: [错误] CatalogServiceApplicationTests.contextLoads » StackOverflow

如果有人有什么想法。 谢谢

测试类:

package org.sid;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class CatalogServiceApplicationTests {

    @Test
    public void contextLoads() {
    }

}

【问题讨论】:

  • 发布测试!
  • 我不明白。该错误没有任何迹象表明Category 类是问题所在。 CatalogServiceApplicationTests.contextLoads 是错误的来源,您还没有显示它。抱歉,没有人会看半个小时的视频来弄清楚。
  • Product 是否有对其Category 的反向引用?那么您的toString()hashCode()equals() 中可能会有一个循环。

标签: java lombok


【解决方案1】:

我认为类别类中缺少@Getter

@Getter
@Document
@Data @AllArgsConstructor @NoArgsConstructor @ToString
public class Category {

    // En principe les id sont des String avec MongoDB
    @Id
    private String id;
    private String name;
    // On suppose que la liste est vide à la création de la Category
    @DBRef
    private Collection<Product> products = new ArrayList<>();
}

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多