[英]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
關系。我找到了缺失的謎題,即分離供應商關系。 我不知道為什么我事先假設這個關系應該被 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.