RelationshipEntity 内部 NodeEntity 的 SDN 4 集合

SDN 4 Collection of NodeEntity inside of RelationshipEntity

我想创建以下@RelationshipEntity:

@RelationshipEntity(type = "VOTE_GROUP")
public class VoteGroup{

    @GraphId
    private Long id;

    @StartNode
    private Decision decision;

    @EndNode
    private Criterion criterion;

    private Object value;

}

和@NodeEntity:

@NodeEntity
public class Vote extends Authorable {

    private final static String CONTAINS = "CONTAINS";

    private double weight;

    private String description;

}

是否可以将 Vote 的集合添加到我的 VoteGroup 关系实体?像这样:

@RelationshipEntity(type = "VOTE_GROUP")
public class VoteGroup{

    @GraphId
    private Long id;

    @StartNode
    private Decision decision;

    @EndNode
    private Criterion criterion;

    private Object value;

    private Set<Vote> votes = new HashSet<>();

}

有用吗?如果是这样,我以后能得到这个投票列表吗..对它们进行分页?

我问这个的原因:

现在,在我当前的实现中,我有一个单独的 VoteGroup 实体,但是 Vote/VoteGroup 创建的性能非常慢,所以这就是为什么我正在寻找一个新方法如何修复它。

@NodeEntity
public class VoteGroup extends BaseEntity {

    private static final String VOTED_ON = "VOTED_ON";
    private final static String VOTED_FOR = "VOTED_FOR";
    private final static String CONTAINS = "CONTAINS";

    @Relationship(type = VOTED_FOR, direction = Relationship.OUTGOING)
    private Decision decision;

    @Relationship(type = VOTED_ON, direction = Relationship.OUTGOING)
    private Criterion criterion;

    @Relationship(type = CONTAINS, direction = Relationship.OUTGOING)
    private Set<Vote> votes = new HashSet<>();

    private double avgVotesWeight;

    private long totalVotesCount;

}

Neo4j 的基本原则是:节点、属性和关系。

  • 节点可以有属性和关系。
  • 关系可以有属性。

将实体集合添加到关系中就像关系具有关系一样。不可能。

您可能可以使用 属性 和 @Convert 用 OGM 伪造它,但是,也许最好不要违背系统的原则,并寻找另一种方法来模拟您的领域。

可能还有其他解决性能问题的方法。也许提出另一个问题,专门描述所面临的性能问题。