Lazy/Eager loading/fetching in Neo4j/Spring-Data

前端 未结 3 814
余生分开走
余生分开走 2020-12-09 04:32

I have a simple setup and encountered a puzzling (at least for me) problem:

I have three pojos which are related to each other:

@NodeEntity
public cl         


        
相关标签:
3条回答
  • 2020-12-09 05:07

    I like the aspect approach to work around the limitation of the current spring-data way to handle lazy loading.

    @niko - I have put your code sample in a basic maven project and tried to get that solution to work with little success:

    https://github.com/samuel-kerrien/neo4j-aspect-auto-fetching
    

    For some reasons the Aspect is initialising but the advice doesn't seem to get executed. To reproduce the issue, just run the following JUnit test:

    playground.neo4j.domain.UserTest
    
    0 讨论(0)
  • 2020-12-09 05:18

    Found the answer to all the questions myself:

    @Iterable: yes, iterable can be used for readonly

    @load on access: per default nothing is loaded. and automatic lazy loading is not available (at least as far as I can gather)

    For the rest: When I need a relationship I either have to use @Fetch or use the neo4jtemplate.fetch method:

    @NodeEntity
    public class User {
        @GraphId Long nodeId;
        @RelatedTo(type="user", direction = Direction.INCOMING)
        private Iterable<Worker> worker;
        @Fetch Unit currentUnit;
    
        String name;
    
    }
    
    class GetService {
      @Autowired private Neo4jTemplate template;
    
      public void doSomethingFunction() {
        User u = ....;
        // worker is not avaiable here
    
        template.fetch(u.worker);
        // do something with the worker
      }  
    }
    
    0 讨论(0)
  • 2020-12-09 05:23

    Not transparent, but still lazy fetching.

    template.fetch(person.getDirectReports());
    

    And @Fetch does the eager fetching as was already stated in your answer.

    0 讨论(0)
提交回复
热议问题