【问题标题】:Neo4j-Spring Data- How to avoid a nested property to be a node in a neo4jNeo4j-Spring Data-如何避免嵌套属性成为 neo4j 中的节点
【发布时间】:2019-12-24 17:47:06
【问题描述】:
  • 我是一名拥有 7 年经验的 Java 开发人员。
  • Neo4j 新手(与 Spring Data 一起使用)

  • 我正在构建一个教育领域的项目。

  • 我有一个名为 Question.java 的模型 (POJO),它由一个嵌套属性(一个列表)Answer 组成。
  • Answer.java 有自己的属性,如 id、ver 等。

现在,当我通过repository.save(questionEntity); 保存问题实体时,它会保存两个节点, 1 是Question,另一个是Answer

我想避免Answer 成为节点。并且,它的数据应该存储在 Question 节点中。

原因 - 假设我有一个问题实体,它有 100 个答案,并尝试通过以下方式获取问题数据 repository.findById(questionEntity.getId());,会遍历 问题 + 答案节点 (1 + 100 = 101)。效率不高。

请在下面查看我的 POJO。提前致谢。

附加问题 - 什么更好? Spring 数据存储库功能,如 findByIdsave 等或 CYPHER 查询?

@NodeEntity
public class Question {
    @Id
    private String cmsQId;
    private String type;
    private String difficultyLevel;
    private String questionId;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private List<Answer> answers;
}


public class Answer {
    private List<String> correctAnswer;
    private Feedback feedback;
}

【问题讨论】:

    标签: java neo4j spring-data-neo4j


    【解决方案1】:

    您好 Mayank,欢迎来到 SO。 您可以使用 CompositeAttributeConverter 的实现,就像在这个 example 中一样,但是您必须自己进行迭代以创建您的集合(例如将数字附加到字段等) 一般来说,我不明白为什么要将Answer 存储在Question 节点中。这不是真正的“图形”和映射,例如101 个对象对于 SDN 来说不是什么大问题,对于图数据库提供数据来说更是如此。

    【讨论】:

    • 感谢您的回复。我试过CopositeAttributeConverter,但我认为它处理的是 Map 而不是 List。而且,Map 和 List 的 Json 表示是不同的。附:问答节点只是一个例子。我有多个场景将在生产中创建数百万个节点。我使用ConverterBasedCollectionConverter 找到了@LearnToLive 在stackoverflow.com/questions/54431684/… 中给出的解决方案。您对此有何看法?
    • 我完全忘记了,是的,如果这能解决您的问题,请继续使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多