【发布时间】: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()中可能会有一个循环。