0

给定以下两个对象:

@NodeEntity  
class Foo  
{
   @GraphId   
   long id;  
   @RelatedTo(Bar.class,direction=Direction.BOTH, type="BAR")  
   Set<Bar> bars= new HashSet<Bar>();    
   @Indexed  
   String name;
}  

@NodeEntity  
class Bar
{
   @GraphId   
   long id;  
   @RelatedTo(Foo.class,direction=Direction.BOTH, type="Foo")  
   Set<Foo> foos= new HashSet<Foo>();    
   @Indexed  
   String name;
}    

以下持久性级别代码非常慢(每个持久性慢 5-20 秒)

@Service  
class Persister  
{  
   @Autowired  
   Neo4JTemplate template;    
   @Autowired  
   FooRepository fooRepo;    
   @Autowired  
   BarRepository barRepo;  
void go()  
{  
    Bar bar = barRepo.findByName("myBar");  
    if(null != bar)  
    {    
        bar.getFoos().addAll(fooRepo.readAll());    
        return bar;  
    }
     template.save(bar);  
 }    
}

interface BarRepository extends Repository<Bar>  
{  
     Bar findByName(String name);  
}
4

2 回答 2

0

你在使用 Neo4j REST 接口吗?如果是这样,我的这篇文章可能会提供一个线索 - Spring-data-neo4j 中 @MapResult 的性能

于 2013-04-10T12:48:29.460 回答
0

您要添加多少个 foo bar

您使用的是简单映射还是高级映射?

您应该有一个@Transactional围绕您的go()方法,否则将为每个添加的实体创建数以千计的小交易。(在高级模式下,在简单模式下,代码不会保存更改。)

于 2013-04-11T07:16:19.893 回答