有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在SpringDataNeo4j中使用RelationshipEntity保存节点的正确方法是什么?

实际上,我正试图用RelationshipEntity类保存一个节点,如下所示:

  1. 节点类

    @NodeEntity  
    public class MyEvent  
    {  
         @GraphId  
         private Long nodeId;  
         @RelatedToVia(type = "INVITED_TO")  
         @Fetch Set<EventResponse> eventResponse;  
    }
  2. 关系实体类

    @RelationshipEntity(type="INVITED_TO")  
    public class EventResponse  implements Serializable   
    {  
       @GraphId  
       Long nodeId;  
    
       @StartNode  
       MyEvent event;  
    
       @EndNode  
       User user;  
    
      //  .....  
    

    }

当我试图保存MyEvent

org.neo4j.graphdb.NotFoundException: '__type__' property not found for RelationshipImpl #153 of type 15 between Node[159] and Node[117].

因此,我猜想基于上述异常,它缺少__type__属性,该属性是标识任何节点类型所必需的。我不太明白,我们有没有办法先保存第一个关系实体,然后再保存第二个关系实体,或者同时保存第二个关系实体


共 (1) 个答案

  1. # 1 楼答案

    类型属性不需要由您显式设置。它由spring-data-neo4j管理

    以下代码片段适合我:

    事件类:

    @NodeEntity
    public class MyEvent
        {
    
        @GraphId
        private Long       nodeId;
    
        @RelatedToVia(type = "INVITED_TO")
        @Fetch
        Set<EventResponse> eventResponse;
    
        }
    

    用户类:

    @NodeEntity
    public class User
        {
    
        @GraphId
        private Long userId;  
    
        }
    

    以及回应类:

    @RelationshipEntity(type = "INVITED_TO")
    public class EventResponse
        {
    
        @GraphId
        private Long    nodeId;
    
        @StartNode
        MyEvent event;
    
        @EndNode
        User    user;
    
        }
    

    我在一个简短的junit测试中使用了它们:

    @Autowired
        private Neo4jTemplate template;
    
        @Transactional
        @Test
        public void saveEvent()
            {
    
            User user = new User();
            MyEvent event = new MyEvent();
    
            EventResponse response = new EventResponse();
            response.user = user;
            response.event = event;
    
            this.template.save(user);
            this.template.save(event);
            this.template.save(response);
    
            }