簡體   English   中英

spring data neo4j (LinkedList) 中的當前/前一個節點關系

[英]current/previous node relations in spring data neo4j (LinkedList)

我正在嘗試創建具有類似於下圖的CURRENT/PREVIOUS上一個關系的節點鏈表。

這張照片

我不確定我的解決方案是否是處理這種情況的正確方法,但為了實現這一點,我使用一種方法創建了兩個節點來填充新消息,如下所示:

@Builder
@Data
@NoArgsConstructor
public class Person {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    @Relationship(type = "LATEST")
    private Message message;
    
    void newMessage(Message newMessage) {
        newMessage.setPrevious(message);
        message = newMessage;
    }
}
    
@Builder
@Data
@NoArgsConstructor
public class Message {
    @Id
    @GeneratedValue
    private Long id;
    private String text;

    @Relationship(type = "PREVIOUS")
    private Message previous;
}

我還創建了一個示例代碼來測試這個解決方案:

@SpringBootApplication
public class NewsFeedApplication {

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

    @Bean
    CommandLineRunner init(PersonRepository personRepository) {
        return args -> {
            Person personToAdd1 = Person.builder().name("John").build();
            personToAdd1.newMessage(Message.builder().text("first message").build());
            personToAdd1.newMessage(Message.builder().text("second message").build());
            personToAdd1.newMessage(Message.builder().text("third message").build());

            personRepository.save(personToAdd1);

            personToAdd1.newMessage(Message.builder().text("New message.").build());

            personRepository.save(personToAdd1);
        };
    }
}

我覺得我很接近,但我不知道如何重置以前的CURRENT關系,我的解決方案生成 output 為:

無效的解決方案

所以問題是:

  • 如果我的方法沒問題,我怎么能刪除以前的CURRENT關系。
  • 如果這種方法是錯誤的,我怎么能正確地為節點實現具有 CURRENT/PREVIOUS 關系的鏈表。

我找到了缺失的謎題,即分離供應商關系。 我不知道為什么我事先假設這個關系應該被 spring 數據存儲庫“保存”方法自動刪除。

工作解決方案:

public interface PersonRepository extends Neo4jRepository<Supplier, Long> {

    @Query("MATCH (n:Person {name: $name})-[r:LATEST]->() DELETE r")
    void detachLatestFromPerson(String name);
}
    void newMessage(PersonRepository personRepository, Message newMessage) {
        personRepository.detachLatestFromPerson(name);
        newMessage.setPrevious(message);
        message = newMessage;
    }

附言。 我仍然有疑問,因為我不確定這是否是處理這種情況的好方法,所以如果您知道更好的解決方案,請提前 go 並發布,我們可以隨時交換“最佳答案”:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM